嗨我有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);
}
答案 0 :(得分:2)
您正在使用Bind
属性明确限制属性模型绑定器将从发布的表单数据进行映射。您没有包含ImageFile
属性,因此默认的模型绑定器没有从发布的表单数据中映射它。
将其添加到“绑定包含”列表中,它将起作用。
public ActionResult Create([Bind(Include = "IdProduct,Name_Product, Price,Stock,
IdCategory,ImageFile")] Inventario inventario)
{
// to do : Your existing code
}
更松散耦合的解决方案是创建一个视图模型,其中包含视图所需的属性并使用它。这是防止过度发布的最佳方法。在视图/视图层中使用数据访问层中的实体类也不是一个好主意。它使它与这些类紧密耦合。