将数据写入响应,但保持页面处于活动状态

本文关键字:活动状态 数据 响应 | 更新日期: 2023-09-27 17:58:37

我试图让用户单击网页上的按钮下载CSV文件,但在向用户发送正确的数据时遇到问题。此外,一旦下载了文件,我希望页面保持"活动"状态,即页面可以继续向服务器触发事件,例如再次单击下载按钮。

这是我目前使用的代码,由各种SO问题拼凑而成:

var sb = new StringBuilder();
string fileName = "data.csv";
// Build CSV file...
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("filename={0}", fileName));
HttpContext.Current.Response.ContentType = "text/csv";
HttpContext.Current.Response.Write(sb.ToString());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();

这可以为用户提供打开或下载文件的选项,但该文件在请求的数据之后还包含aspx文件的整个标记,并且页面处于完全不活动状态。

我猜问题出在上面代码的最后两行。我尝试过使用ApplicationInstance.CompleteRequest而不是Response.End,但这似乎并没有改变结果。页面仍然处于非活动状态,文件的末尾仍然有标记。有人能帮忙吗?

如果Response的行为有所不同,则该页面在SharePoint 2010中为WebPartPage

将数据写入响应,但保持页面处于活动状态

设置线路

HttpContext.Current.Response.AddHeader("content-disposition", "filename={0}", fileName));

HttpContext.Current.Response.AppendHeader("content-disposition", String.Format("attachment;filename={0}", fileName));

并在按钮上设置以下属性

downloadButton.OnClientClick = "_spFormOnSubmitCalled = false;";

_spFormOnSubmitCalled是一个javascript变量,SharePoint使用它来停止多个表单提交,当您单击下载按钮时,它将被设置为true。

尝试这个

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename='"" + fileName + "'""); HttpContext.Current.Response.ContentType = "application/CSV";