Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
.net 如何在实体中更新而不更新文件上载字段_.net_Asp.net Mvc_Entity Framework_File Upload - Fatal编程技术网

.net 如何在实体中更新而不更新文件上载字段

.net 如何在实体中更新而不更新文件上载字段,.net,asp.net-mvc,entity-framework,file-upload,.net,Asp.net Mvc,Entity Framework,File Upload,我想寻求帮助,你看,我有一个更新方法,当图像上传输入为空时不起作用。不应该是这种情况,因为不是所有字段都在更新。我正在为我的后端使用实体框架 这是来自控制器的代码 public ActionResult Edit(int id, ClearanceDB clearanceDB) { try { string fileName = Path.GetFileNameWithoutExtension(cl

我想寻求帮助,你看,我有一个更新方法,当图像上传输入为空时不起作用。不应该是这种情况,因为不是所有字段都在更新。我正在为我的后端使用实体框架


这是来自控制器的代码

public ActionResult Edit(int id, ClearanceDB clearanceDB)
        {
            try
            {
                string fileName = Path.GetFileNameWithoutExtension(clearanceDB.ImageFile.FileName);
                string extension = Path.GetExtension(clearanceDB.ImageFile.FileName);
                fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension;
                clearanceDB.picture = "/Image/" + fileName;
                fileName = Path.Combine(Server.MapPath("/Image/"), fileName);
                clearanceDB.ImageFile.SaveAs(fileName);
                using (ClearanceModels dbModel = new ClearanceModels())
                {
                    dbModel.Entry(clearanceDB).State = EntityState.Modified;
                    //dbModel.Entry(clearanceDB).Property(p => p.ImageFile).IsModified = false;
                    dbModel.SaveChanges();
                }
                // TODO: Add update logic here

                return RedirectToAction("Index");
            }
            catch
            {
                //if (clearanceDB.ImageFile == null)
                //{
                //    dbModel.Entry(clearanceDB).Property(I => I.ImageFile).IsModified = false;
                //}
                return View();
            }
        }
正如您在评论部分所看到的,我尝试使用“IsModified”属性来阻止图像上传,但可惜它不起作用。我还尝试检查图像是否为空,但它也不工作。因为我已经尝试过“IsModified”属性,而且它是我发现的最常见的解决方案,所以我不知道还可以尝试什么。其他解决方案太复杂,我只需要更新工作,而不上传新的图像。谢谢你的帮助


这是ClearanceDB类模型,图片是导致此问题的唯一字段,因此我没有放置其他字段

[Display(Name = "Picture")]
 //[Required(ErrorMessage = "Required!")]
public string picture { get; set; }

ublic HttpPostedFileBase ImageFile { get; set; }

如果有帮助,请从视图中编写代码

<img src="@Html.DisplayFor(model => model.picture)" height="200" width="250" />
                <input type="file" name="ImageFile" value="@Html.DisplayFor(model => model.picture)">
model.picture)“height=“200”width=“250”/

在调试和更多研究之后,我能够修复该问题。首先,我删除了try-catch以找到根本原因,在删除try-catch后,它给出了一个NullReferenceException,我意识到clearanceDB.ImageFile为null,这是正确的,因为没有上载新图像,但是该场景和refore程序正在发布空值

 public ActionResult Edit(int id, ClearanceDB clearanceDB)
        {
            if (clearanceDB.ImageFile == null)
            {
                using (ClearanceModels dbModel = new ClearanceModels())
                {
                    dbModel.Entry(clearanceDB).State = EntityState.Modified;
                    dbModel.Entry(clearanceDB).Property(p => p.picture).IsModified = false;
                    dbModel.SaveChanges();
                }
            }
            else
            {
                string fileName = Path.GetFileNameWithoutExtension(clearanceDB.ImageFile.FileName);
                string extension = Path.GetExtension(clearanceDB.ImageFile.FileName);
                fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension;
                clearanceDB.picture = "/Image/" + fileName;
                fileName = Path.Combine(Server.MapPath("/Image/"), fileName);
                clearanceDB.ImageFile.SaveAs(fileName);
                using (ClearanceModels dbModel = new ClearanceModels())
                {
                    dbModel.Entry(clearanceDB).State = EntityState.Modified;
                    dbModel.SaveChanges();
                }
            }
            // TODO: Add update logic here

            return RedirectToAction("Index");
        }

这是控制器更新的编辑功能,我知道这里有重复的代码,我会努力改进,现在我很乐意解决这个问题。

当上传输入为空时-你是什么意思?哪些字段为空?也许你必须向我们展示ClearanceDB类。你想更新哪些字段?您好,我已经包括了ClearanceDB类。至于您的问题,是当图像上载为空时,这意味着除非上载新图片,否则更新将无法工作。其他字段不会发生这种情况。