让用户在ASP.Net中下载生成的文件

时间:2014-07-17 13:45:44

标签: asp.net download

我正在创建一个ASP.Net Web应用程序,我想添加一个导出功能。当单击一个按钮时,该功能将生成一个字符串(xml,具体而言)。

我想让用户将此字符串作为文件下载。

我是否需要在服务器的硬盘上创建一个文件并打开该文件的链接,或者是否有办法直接下载字符串(因此ASP.net负责创建和删除文件) ?

我目前正在尝试执行以下操作:

Response.Clear();
Response.Buffer = true;
Response.ContentEncoding = Encoding.GetEncoding(1252);
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=filename.txls");
//Multiple Response.Write(string) calls to add content to the file
Response.End();

使用firebug,我发现用户收到了标题,但文件没有打开。

Internet Explorer甚至可以向我显示响应文本,并且有一个用于保存文件的按钮(这两个选项仅在开发人员工具中可用)并且文件是正确的,但是,该文件仍然没有'打开一个窗口(也不是浏览器中的预览)。

当我使用Internet Explorer(似乎有更好的Visual Studio调试集成)时,会出现JavaScript错误:

The EnableScriptGlobalization property cannot be changed during async postbacks or after the Init event.

对Response.Write()的调用似乎是此问题的常见原因。当然,我多次调用该方法。

我发现网页上的JavaScript(脚本似乎是自动生成的)试图解析响应,但当然它没有以asp.NET内部通信格式格式化,但在我的自己的XML格式。

如何告诉该页面将我的页面视为可下载文件?

2 个答案:

答案 0 :(得分:1)

string someXML=GetXMLContent();//I assume you have an implementation of this
Response.Clear();
Response.ContentType = "text/xml";
Response.AddHeader("Content-Disposition", "attachment; filename=filename.xml");
Response.Write(someXML);
Response.End();

需要注意的事项。最好在早期构建XML字符串,然后一次性将其写入响应。它使代码更清晰,因为您可以通过这种方式区分您的问题。

另外,我将内容类型切换为“text / xml”,因为这不是Excel文件。此外,您的文件扩展名不正确。按惯例的XML以.xml结尾。我删除了内容编码,因为大部分时间都没有必要。如果您正在处理奇怪的角色,请随意添加回来。还删除了以删除不必要的东西为名的缓冲区。

尝试此操作,然后尝试在文本编辑器中打开生成的文件并验证内容。

答案 1 :(得分:0)

问题是负责触发Excel导出的按钮不是PostBackTrigger。一旦我改变了它,一切都像魅力一样。

尽管如此,我不知道hy这修复了一切。将按钮设置为PostBackTrigger时,它会发生什么变化