Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 5-尝试通过编辑操作修改图像失败_C#_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

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();

谢谢你的简单回答谢谢你的简单回答