如何允许用户上传图像并使其在Razor Table中可见?

时间:2019-05-07 10:57:29

标签: c# asp.net asp.net-mvc asp.net-core

因此,上个月我一直在学习ASP.NET Core MVC,并尝试构建我的第一个网站。我设法在新的控制器中进行上传和显示代码,但是现在我要做的是使用户能够将图片上传到DB,以获取电影(或在我的情况下发货)并在其中显示表格的“详细信息”页面。我已经看过很多代码,但都不适合我的情况,这很可能是因为我做错了事(我以前没有编程方面的经验,只是在学校里很擅长编程,并且对ifs等基本知识有所了解,而等等。非常感谢您提供的任何帮助!

试图制作一个系统,每次将图像名称重命名为一个数字,这样我就可以使用Ship的ID购买正确的图像。问题在于,每次重新启动服务器时,变量都会不断重置。然后,我尝试使用一个人在数据库中创建的普通表,但是我找不到一种方法来显示它(我看到的所有教程都已经过时了,而且看起来也不太好)。

那是我的模型代码:

namespace Sailing.Models
{
public class Ships
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Captain { get; set; }
    public int Crew { get; set; }
    public string ImageName { set; get; }
}


public class CreateModel : PageModel
{
    private readonly SailingContext context;
    private readonly IHostingEnvironment hostingEnvironment;
    public CreateModel(SailingContext context, IHostingEnvironment environment)
    {
        this.hostingEnvironment = environment;
        this.context = context;
    }
    [BindProperty]
    public Ships Ship { set; get; }

    [BindProperty]
    public IFormFile Image { set; get; }

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
            return Page();

        if (this.Image != null)
        {
            var fileName = GetUniqueName(this.Image.FileName);
            var uploads = Path.Combine(hostingEnvironment.WebRootPath, "uploads");
            var filePath = Path.Combine(uploads, fileName);
            this.Image.CopyTo(new FileStream(filePath, FileMode.Create));
            this.Ship.ImageName = fileName; // Set the file name
        }
        context.Ships.Add(this.Ship);
        await context.SaveChangesAsync();
        return RedirectToPage("ShipsList");
    }
    private string GetUniqueName(string fileName)
    {
        fileName = Path.GetFileName(fileName);
        return Path.GetFileNameWithoutExtension(fileName)
               + "_" + Guid.NewGuid().ToString().Substring(0, 4)
               + Path.GetExtension(fileName);
    }
}

}

这是我的创建代码:

<div class="row">
<div class="col-md-4">
    <form asp-action="Create"  enctype="multipart/form-data">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        ........................
        </div>
        <div>
            <input type="file" asp-for="Image" />
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>
</div>

好吧,我希望IFormFile能够工作并显示图像,但是Image IFormFile无法识别,如果将其与表示IFormFile不是有效类型的其余属性放在一起,则会出现错误。我在这里写的方式,在创建了名为Image的列之后,出现了错误:

严重性代码描述项目文件行抑制状态 错误CS1061“船舶”不包含“图像”的定义,找不到可以接受的扩展方法“图像”,该类型接受“船舶”类型的第一个参数(是否缺少using指令或程序集引用?)

0 个答案:

没有答案