在MVC3 Controller操作中返回文件和呈现的视图

时间:2011-11-10 14:31:54

标签: asp.net-mvc-3 download

是否可以返回文件以供下载并从控制器方法调用更新视图?

或需要解决方法,可能使用javascript(加载后调用页面刷新)?

文件下载是根据ViewModel中设置的参数动态创建的 (从页面上的各种控件中搜索参数)。

3 个答案:

答案 0 :(得分:7)

您可以使用操作中的ViewModel或ViewData返回文件地址,并使用window.location.href,如视图末尾的以下代码所示。

<强>控制器

public ActionResult Index()
{
    /* ... */

    ViewBag.FileName = "{FileName}";
    return View();
}

public ActionResult Download(string id) {
    /* ... */

    return File("{Path}", "{MIME type}", "{Desired file name}");
}

<强>标记

<script type="text/javascript">

    window.location.href = "/home/download/" + "@Ajax.JavaScriptStringEncode(@ViewBag.FileName)";

</script>

答案 1 :(得分:2)

虽然无法将ViewResult与ViewResult一起返回,但您可以在返回的视图上使用元刷新,以便在页面加载后重定向到该文件。

<meta http-equiv="refresh" content="600;url=/path/to/the/file" />

答案 2 :(得分:1)

一个请求可以有一个响应,响应头中定义了响应类型,因此基本答案为否 你可以看到做的是返回一个包含javascript的视图,然后请求文件下载。