将字符串下载为文件

时间:2010-01-19 15:05:33

标签: c# asp.net file-io

当用户点击按钮时,我想构建一个字符串,然后让用户将该字符串下载为文件(它是一个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);
    }

这是我到目前为止所做的,我感觉我非常接近,但是我收到以下错误消息:

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

我很茫然,截止日期快到了。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

使用Ajax进行部分/异步回发无法做到这一点。您需要在触发此按钮的任何按钮上为UpdatePanel下载PostBackTrigger。详情请见http://www.asp.net/Ajax/Documentation/Live/mref/T_System_Web_UI_PostBackTrigger.aspx

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我会让按钮发布到.ashx处理程序(这里是tutorial)并将处理过的代码(可能还有一些小改动)放在处理程序的ProcessRequest方法中

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