如何从控制器返回视图后POST文件上传

时间:2014-07-17 16:42:05

标签: asp.net-mvc razor model-view-controller file-upload

我可以成功上传文件(存储在数据库中的路径,文件移动到文件存储位置)。但是,如果视图中的另一个字段的验证失败并且用户返回到视图页面,则文件输入将显示" No File Chosen"。

在debug中,当控制器返回到视图时,this.Model.CoverLetter是" System.Web.HttpPostedFileWrapper"。

如何保留此文件以便可以通过POST重新提交?我是否需要在控制器中执行某些操作才能将文件信息传递回视图以重新提交?

查看:

<label for="CoverLetter">Cover Letter</label>
<input type="file" name="CoverLetter" id="CoverLetter" accept=".pdf,.doc,.docx,.txt" />
@Html.ValidationMessage("CoverLetter")

控制器:

[HttpPost]
public ActionResult Create(Applicant application, HttpPostedFileBase CoverLetter)
{
     this.ModelState.AddModelErrors(application.Validate(update: false));

     if (this.ModelState.IsValid && application.Create())
     {
          //this stuff works
     }
     return View(application);
}

1 个答案:

答案 0 :(得分:1)

出于安全原因,不能以编程方式设置输入类型文件的值。这是不允许的。

您可以做的最好的事情是尽可能在客户端进行验证,并对需要在服务器端验证的内容进行ajax验证。