MVC返回文件和清除模型状态

时间:2014-03-23 15:59:45

标签: c# asp.net-mvc asp.net-mvc-4

我在一个页面上有单个按钮,它调用返回文件的方法,当有任何问题时我会在模型状态中添加错误,然后我清除它。

问题是,当我只返回文件时,如果以前在模型状态中添加了一些错误,现在下载文件后,模型状态不会刷新,我仍然可以看到错误。

[HttpPost]
public ActionResult Index(HttpPostedFileBase file, HomeViewModel model, string command)
{
    if (!string.IsNullOrEmpty(reportPath) && !string.IsNullOrEmpty(reportName))
    {          
        ModelState.Clear();
        return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, reportName);
    }

    ModelState.AddModelError("", "File wrong format");

    return View(model);
}

1 个答案:

答案 0 :(得分:0)

当您的Action返回文件时,它不会使用您的viewModel呈现的新视图进行响应。 ModelState也不会在您的视图中呈现。您可以使用开发工具栏(例如Firebug)验证这一点,并在按下按钮时查看请求/响应。如果您的操作返回文件,则不会传输HTML页面。

在您的情况下,只需在按下按钮时使用JavaScript删除客户端的警告。如果下载成功,您将不再看到错误。如果Action返回错误(和ModelState),它将再次呈现并显示错误