Return MVC HttpPost 动作控制器中的 FilePathResult 和 ViewResult
Return FilePathResult and ViewResult in MVC HttpPost action controller
视图接受一些用户输入,并有一个 "Download" 按钮,让用户下载根据输入的字段生成的 xml。我还在模型中进行了 [Required] 属性验证,按预期显示错误消息
[Required(ErrorMessage="Provider is Required")]
string provider { get; set; }
当用户填写遗漏的必填字段并点击 "Download" 控制器 returns xml 作为 FilePathResult
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public ActionResult TestXMLCreator(TemplateModel model)
{
.
.
if (ModelState.IsValid)
{
.
.
System.IO.File.WriteAllText(Server.MapPath("~/Generated.xml"), testXml);
return File(Server.MapPath("~/Generated.xml"), "text/plain", testXML.xml");
}
return View(model)
当 ModelState 有效并返回 File 作为结果时,视图不会刷新,并且仍然显示旧的验证错误。如何返回 FileResult 并刷新 View?
您不能在一次操作中完成这两件事。
您唯一可以做的就是 return 刷新视图,包括 link 生成的文件。用户只需点击一下即可下载文件。
如果您想避免点击,可以使用 JavaScript 模拟它,例如 jQuery,如 this SO Q&A.
视图接受一些用户输入,并有一个 "Download" 按钮,让用户下载根据输入的字段生成的 xml。我还在模型中进行了 [Required] 属性验证,按预期显示错误消息
[Required(ErrorMessage="Provider is Required")]
string provider { get; set; }
当用户填写遗漏的必填字段并点击 "Download" 控制器 returns xml 作为 FilePathResult
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public ActionResult TestXMLCreator(TemplateModel model)
{
.
.
if (ModelState.IsValid)
{
.
.
System.IO.File.WriteAllText(Server.MapPath("~/Generated.xml"), testXml);
return File(Server.MapPath("~/Generated.xml"), "text/plain", testXML.xml");
}
return View(model)
当 ModelState 有效并返回 File 作为结果时,视图不会刷新,并且仍然显示旧的验证错误。如何返回 FileResult 并刷新 View?
您不能在一次操作中完成这两件事。
您唯一可以做的就是 return 刷新视图,包括 link 生成的文件。用户只需点击一下即可下载文件。
如果您想避免点击,可以使用 JavaScript 模拟它,例如 jQuery,如 this SO Q&A.