当我尝试添加图像时,MVC总是返回null

时间:2018-05-21 00:45:14

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

嗨我有MVC的问题我需要将图像保存到我的数据库中的表中,但总是给我一个错误" ImageFile.get return null"当我尝试添加图像时

这是我的代码

我的模特

public partial class Inventario
{
    public int IdProduct { get; set; }
    [DisplayName("Product")]
    public string Name_Product { get; set; }
    public Nullable<decimal> Price{ get; set; }
    public Nullable<int> Stock{ get; set; }
    [DisplayName("Category")]
    public Nullable<int> IdCategory { get; set; }
    [DisplayName("Upload Image")]
    public string ImagePath { get; set; }


    public HttpPostedFileBase ImageFile { get; set; }
}

我的观点

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

<input type="file" name="ImageFile" required>

我的控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "IdProduct,Name_Product,Price,Stock,IdCategory,ImagePath")] Inventario inventario)
{
    string fileName = Path.GetFileNameWithoutExtension(inventario.ImageFile.FileName);
    string extension = Path.GetExtension(inventario.ImageFile.FileName);
    fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension;
    inventario.ImagePath = "~/Image/" + fileName;
    fileName = Path.Combine(Server.MapPath("~/Image/"), fileName);
    inventario.ImageFile.SaveAs(fileName);

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

    return View(inventario);
}

1 个答案:

答案 0 :(得分:2)

您正在使用Bind属性明确限制属性模型绑定器将从发布的表单数据进行映射。您没有包含ImageFile属性,因此默认的模型绑定器没有从发布的表单数据中映射它。

将其添加到“绑定包含”列表中,它将起作用。

public ActionResult Create([Bind(Include = "IdProduct,Name_Product, Price,Stock,
                                            IdCategory,ImageFile")] Inventario inventario)
{  
    // to do : Your existing code
}

更松散耦合的解决方案是创建一个视图模型,其中包含视图所需的属性并使用它。这是防止过度发布的最佳方法。在视图/视图层中使用数据访问层中的实体类也不是一个好主意。它使它与这些类紧密耦合。