Asp.net mvc 4 当使用MVC4修改和保存记录时,如何防止在图像字段中插入空值?
我正在成功地将图像存储到数据库中 我想在编辑表单中显示此图像以修改和保存更改。但我只能在编辑表单中显示图像。我在数据库中修改和保存图像的代码不起作用。当记录被修改和保存时,或者如果我在编辑视图中修改除图像字段以外的所有其他字段,它会在图像字段中插入空值 有人能告诉我我犯了什么错误吗?以下是我的控制器操作:Asp.net mvc 4 当使用MVC4修改和保存记录时,如何防止在图像字段中插入空值?,asp.net-mvc-4,Asp.net Mvc 4,我正在成功地将图像存储到数据库中 我想在编辑表单中显示此图像以修改和保存更改。但我只能在编辑表单中显示图像。我在数据库中修改和保存图像的代码不起作用。当记录被修改和保存时,或者如果我在编辑视图中修改除图像字段以外的所有其他字段,它会在图像字段中插入空值 有人能告诉我我犯了什么错误吗?以下是我的控制器操作: public ActionResult Edit(student st) { if (ModelState.IsValid) { var imgFile = Requ
public ActionResult Edit(student st) {
if (ModelState.IsValid) {
var imgFile = Request.Files["imgFile"];
if (imgFile != null && imgFile.ContentLength > 0) {
var fileName = Path.GetFileName(imgFile.FileName);
var path = Path.Combine(Server.MapPath("~/Content/stImgs"), fileName);
imgFile.SaveAs(path);
st.Img = fileName;
}
}
try {
db.Entry(st).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("student");
} catch {
return View(st);
}
}
以下是我的看法:
<img src="/Content/Imgs/@Model.Img">
</div>
<label for="file">Image:</label>
<input type="file" name="file" id="file" />
@Html.ValidationMessageFor(item => item.file)
图片:
@Html.ValidationMessageFor(item=>item.file)
尝试在操作方法中添加HttpPostedFileBase
参数:
public ActionResult Edit(student st, HttpPostedFileBase file)
{
if (ModelState.IsValid) {
if (file != null && file.ContentLength > 0) {
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/stImgs"), fileName);
file.SaveAs(path);
st.Img = fileName;
}
}
try {
db.Entry(st).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("student");
} catch {
return View(st);
}
}
确保参数名称与表单中的文件名称相同强>
此外,请确保表单设置为enctype multipart/Form data:
Html.BeginForm(
action, controller, FormMethod.Post, new { enctype="multipart/form-data"})
Microsoft更改更新操作方法的工作方式。 请阅读下面的“更新编辑HttpPost方法”一节
这些更改实现了一种安全性最佳实践,以防止过度伪装,架子工生成了一个绑定属性,并将模型绑定器创建的实体添加到具有修改标志的实体集中。不再推荐使用该代码,因为Bind属性会清除Include参数中未列出的字段中的所有预先存在的数据。将来,MVC控制器支架将被更新,以便它不会为编辑方法生成绑定属性
新代码读取现有实体并调用TryUpdateModel,以根据已发布表单数据中的用户输入更新字段。实体框架的自动更改跟踪在实体上设置修改标志。调用SaveChanges方法时,Modified标志会导致实体框架创建SQL语句来更新数据库行。将忽略并发冲突,并更新数据库行的所有列,包括用户未更改的列。(后面的教程将介绍如何处理并发冲突,如果您只想更新数据库中的各个字段,则可以将实体设置为未更改,并将各个字段设置为已修改。)在您的视图中,文件名似乎是“file”,但是你在你的控制器中用'imgFile'请求它。我将imgFile更改为文件,然后尝试,但它不起作用。你的模型的文件是什么类型的?
项.file
?它是字节数组还是HttpPostedFileBase
?公共字符串文件{get;set;}尝试在操作方法中添加一个参数:public ActionResult Edit(student st,HttpPostedFileBase file){}
model.st_ID)@Html.AntiForgeryToken()>我正在这样做,但它不起作用。