在同一请求中呈现视图和下载文件

时间:2015-08-20 11:58:07

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

当用户完成表单后,用户将被重定向到感谢页面。感谢页面将呈现它的视图,但也下载文件(pdf / a stream)。

我更喜欢这样做,而不使用像这样的JavaScript return both a file and a rendered view in an MVC3 Controller action我希望得到另存为对话框。

MVC是否有任何可以处理此问题的约定?

2 个答案:

答案 0 :(得分:2)

正如@BenRobinson指出的那样,您无法从单个请求中返回两个响应。不,MVC没有任何约定来处理这个问题,因为它是您正在开发的平台,特别是TCP / IP和HTTP协议的基本限制。

从根本上说,网络围绕着所谓的请求 - 响应周期。客户端(通常是Web浏览器)向服务器发出请求,该服务器使用请求的资源进行响应。您正在谈论的内容类似于请求 - 响应 - 响应,这是不可能的。在没有先收到请求的情况下,服务器不能只向上发送并向客户端发送响应。

因此,您的选择是:

  1. 使用JavaScript以编程方式发出其他请求,例如将location.href设置为链接问题的接受答案。

  2. 提供一个链接/按钮/其他任何内容,以允许用户手动发起文件请求。

  3. 那就是它。无论哪种方式,您都需要一个新的请求,由JavaScript或最终用户发起以获取文件。

答案 1 :(得分:1)

你有没有尝试过meta refresh Trick。

<META HTTP-EQUIV='REFRESH' CONTENT='5;URL=http://www.example.com/test.txt'>

请记住为要在浏览器中下载的文件设置标题Content-Disposition: attachment