.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类。至于您的问题,是当图像上载为空时,这意味着除非上载新图片,否则更新将无法工作。其他字段不会发生这种情况。