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

本文关键字:视图 下载 文件 请求 | 更新日期: 2023-09-27 18:08:59

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

我宁愿这样做,而不使用这样的javascript在MVC3控制器动作中返回一个文件和一个渲染视图,我更喜欢得到另存为对话框。

MVC有任何约定可以处理这个吗?

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

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

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

因此,您的选项是:
  1. 使用JavaScript以编程方式发出另一个请求,例如通过将location.href设置为链接问题建议的接受答案

  2. 提供一个链接/按钮/等等,允许用户手动发起对文件的请求。

就是这样。无论哪种方式,您都需要一个新的请求(由JavaScript或最终用户发起)来获取该文件。

你试过meta刷新技巧了吗?

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

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