【问题标题】:ASP.NET MVC upload images to a modelASP.NET MVC 将图像上传到模型
【发布时间】:2022-01-11 23:30:09
【问题描述】:

我在 ASP.NET MVC 中添加图像时遇到了一点问题。我在我的根文件夹中创建了一个名为 /Images/Brands/ 的文件夹,我想在其中保存我的品牌模型的图像。

这是我的Brand 模型:

namespace AspProjectBootstrap.Models
{
    public class Brand
    {
        public int ID { get; set; }
        [Required]
        public String Name { get; set; }
        [Required]
        public String Description { get; set; }
        public virtual ICollection<Product> Products { get; set; }
        public String ImagePath { get; set; }
        [NotMapped]
        public HttpPostedFileBase ImageFile { get; set; }
    }
}

我看到有些人将模型类中的路径保存为ImagePath,然后在需要时从ImagesPath 获取图像的完整路径。

这是我创建品牌的功能:

public ActionResult Create(Brand brand)
{
    string filename = Path.GetFileName(brand.ImageFile.FileName);
    filename = DateTime.Now.ToString("yymmssfff") + filename+".png";
    brand.ImagePath = "~/Images/Brands/" + filename;
    filename = Path.Combine(Server.MapPath("~/Images"), filename);
    brand.ImageFile.SaveAs(filename);

    if (ModelState.IsValid)
    {
        db.Brands.Add(brand);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(brand);
}

但我得到一个错误。

如果您知道如何解决此问题,或任何其他方法来完成此任务。

提前谢谢你。

错误是:

创建Create.cshtml 视图是:

<div class="form-group">
    @Html.LabelFor(model => model.ImagePath, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        <input type="file" name="ImageFile" />
    </div>
</div>

【问题讨论】:

  • 错误是什么?
  • 图像没有添加到文件夹中,并给我错误 brand.ImageFile.SaveAs(filename);
  • 你说“但它给了我一个错误。” - 错误说明了什么?
  • System.NullReferenceException : 'La référence d'objet n'est pas définie à une instance d'un object.' AspProjectBootstrap.Models.Brand.ImageFile.get retournée null.
  • Edit 请回答您的问题。我建议使用调试器单步执行代码以查找空引用的位置。

标签: c# .net sql-server asp.net-mvc entity-framework


【解决方案1】:

您的 Create 方法正在接受序列化模型,虽然模型可以包含文件数据,但它可能无法解析名称:

这应该可行:

@Html.TextBoxFor(model => model.ImageFile, new { type="file" })

这将确保生成的输入被命名,以便 MVC 在表单提交或序列化模型时识别它。

如果这不起作用,接下来要检查的是在string filename = Path.GetFileName(brand.ImageFile.FileName); 上放置一个断点并检查哪个部分是#null。 ImageFile 是 null 还是 ImageFile.FileName?您还应该验证您的代码以检查是否存在空值,以防可以在不提供文件的情况下提交表单。

【讨论】:

    【解决方案2】:

    问题出在 Create.cshtml 视图中:

    @using (Html.BeginForm())
    

    解决办法是:

    @using (Html.BeginForm("Create","Brands", FormMethod.Post, new { enctype = "multipart/form-data" }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 2012-05-11
      • 2010-11-25
      • 1970-01-01
      相关资源
      最近更新 更多