C# MVC 5-尝试通过编辑操作修改图像失败
这是我的模型课C# MVC 5-尝试通过编辑操作修改图像失败,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,这是我的模型课 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")
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);
}
我的问题是,在Edit HttpPost中,如果我没有指定新的图像文件,那么在尝试保存时会出现以下错误
但是,如果我在编辑页面中提供了一个新图像,那么代码就可以工作了
如果你能告诉我我做错了什么,我将不胜感激
谢谢。你好像把它弄颠倒了。 似乎只有在提供名称和图像的情况下才更新名称和图像。 还有身份证——你一直都有。 你为什么不:
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);
然后在需要的时候进行优化。看起来你有点颠倒了。 似乎只有在提供名称和图像的情况下才更新名称和图像。 还有身份证——你一直都有。 你为什么不:
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);
然后在需要时进行优化。您没有将对象附加到上下文中,因此它试图插入新行而不是更新,您需要执行以下操作:
db.Data.Attach(data);
db.Entry(data).State = EntityState.Modified;
db.SaveChanges();
您没有使用上下文附加对象,因此发生的情况是它试图插入新行而不是更新,您需要执行以下操作:
db.Data.Attach(data);
db.Entry(data).State = EntityState.Modified;
db.SaveChanges();
谢谢你的简单回答谢谢你的简单回答