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.