【问题标题】:How to update in entity without updating the file upload field如何在不更新文件上传字段的情况下更新实体
【发布时间】:2021-05-14 08:30:01
【问题描述】:

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


这是来自控制器的代码

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类Model,图片是唯一导致这个问题的字段所以我没有放其他字段。

[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)">

【问题讨论】:

  • 上传输入为空时 - 什么意思?哪些字段是空的?也许您必须向我们展示 ClearanceDB 类。您要更新哪些字段?
  • 您好,我已经包含了 ClearanceDB 类。至于您的问题,是图片上传为空时,这意味着除非上传新图片,否则更新将不起作用。这不会发生在其他领域。

标签: .net asp.net-mvc entity-framework file-upload


【解决方案1】:

经过调试和更多研究,我能够解决问题。首先,我删除了 try catch 以找到根本原因,在删除 try catch 后,它给出了 NullReferenceException 我意识到clearanceDB.ImageFile 是 null 这是正确的,因为没有上传新图像但是这种情况没有逻辑并且因此程序正在发布空值。

 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");
        }

这是来自控制器的更新编辑功能我知道这里有重复的代码我会尝试改进它现在我很高兴解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多