将字符串作为文件下载

问题描述:

当用户单击按钮时,我想要构建一个字符串,然后让用户将该字符串作为文件下载(它是一个CSV文件)。将字符串作为文件下载

var response = HttpContext.Current.Response; 
    response.ClearContent(); 
    response.Clear(); 
    byte[] bytes = Encoding.ASCII.GetBytes(csvtext); 
    using (var stream = new MemoryStream(bytes)) 
    { 
     response.AddHeader("Content-Disposition", "attachment; filename=somefile.csv"); 
     response.AddHeader("Content-Length", stream.Length.ToString()); 
     response.ContentType = "text/plain"; 
     stream.WriteTo(response.OutputStream); 
    } 

这是我到目前为止,我有一种感觉,我很接近,但我得到了以下错误消息:

微软JScript运行时错误:Sys.WebForms.PageRequestManagerParserErrorException:本从服务器收到的消息无法解析。此错误的常见原因是,通过调用Response.Write(),响应筛选器,HttpModules或服务器跟踪已启用来修改响应时。 详细信息:在'[CSV文件的第一位]'附近解析错误'。

我不知所措,截稿日期即将到来。任何帮助是极大的赞赏。

您无法使用Ajax进行部分/异步回发。您需要将触发此下载的任何按钮设置为UpdatePanel的PostBackTrigger。详情点击这里:http://www.asp.net/Ajax/Documentation/Live/mref/T_System_Web_UI_PostBackTrigger.aspx

+0

这样做的伎俩,谢谢! – 2010-01-19 19:07:12

我的猜测是你在AJAX更新面板。如果您正在执行此类操作,则必须通过回传完成。

This可能会回答你的问题。具体而言,您应该使用“text/csv”作为内容类型。

我先给按钮后到.ashx的处理程序(这里的这些tutorial),并把你写在您的文章(有一些小的变化也许)的代码在ProcessRequest方法处理程序。

编辑:另外,您可能对this question感兴趣。