这是我的模型类
public class Data
{
public int ID { get; set; }
public string Name { get; set; }
public byte[] Image { get; set; }
}
这是我的编辑HttpPost方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ID,Name,Image")] Data data, HttpPostedFileBase image1)
{
if(ModelState.IsValid)
{
if(image1 != null)
{
data.Image = new byte[image1.ContentLength];
image1.InputStream.Read(data.Image, 0, image1.ContentLength);
}
else
{
data.Image = db.Data.Find(data.ID).Image;
}
db.Entry(data).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(data);
}
我的问题是,在编辑HttpPost中如果我没有指定新的图像文件,那么在尝试保存时我会收到以下错误。
但是,如果我在“编辑”页面中提供新图像,则代码可以正常工作。
如果你能告诉我这里做错了什么,我非常感激。
谢谢。
答案 0 :(得分:2)
好像你有点颠倒了。 好像你只是更新名称和图像,如果提供的话。 而我 - 你一直都有。 为什么不这样做:
if(ModelState.IsValid)
{
var dbData = db.Data.Find(data.ID);
dbData.Name = data.Name
if(image1 != null)
{
dbData.Image = new byte[image1.ContentLength];
image1.InputStream.Read(dbData.Image, 0, image1.ContentLength);
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(data);
并在需要时进行优化。
答案 1 :(得分:2)
您没有使用上下文附加对象,所以发生的事情是它尝试插入新行而不是更新,您需要这样做:
db.Data.Attach(data);
db.Entry(data).State = EntityState.Modified;
db.SaveChanges();