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()>我正在这样做,但它不起作用。