0

我正在从页面上的链接生成 CSV 并将其发送回用户。我希望维护页面上下文。这段代码在我的 2008 Dev box 上完美地运行在 IE、Chrome 和 Firefox 上,但是当在 Vista、Win 7 或 Win 8 上运行时,该文件会附加页面的 HTML。

我对传递文件的方法进行了相当多的阅读,并得出结论,response.flush() 是最好的方法。

        // Convert to Bytes for Binary Write
        Byte[] bytes = Utils.Instance.ReadStreamToByte(streamWriter.BaseStream);

        // Call ContentType followed by clear so no extraneous content is sent. see http://msdn.microsoft.com/en-us/library/system.web.httpresponse.aspx
        HttpContext.Current.Response.ContentType = "text/csv";
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AppendHeader("content-length", bytes.Length.ToString());
        HttpContext.Current.Response.AppendHeader("content-Disposition", "attachment;filename=" + "MyAccount Sales Report " + MonthDDL.SelectedItem.Text + "-" + YearDDL.SelectedItem.Text + ".csv");
        HttpContext.Current.Response.BinaryWrite(bytes);
        HttpContext.Current.Response.Flush();

我已经搜索了为什么会发生这种情况,但尚未找到任何相关帮助。我确实改变了 Clear(); 的位置;根据上面评论中列出的 Microsoft 文章,但这没有影响。

4

1 回答 1

0

在刷新后添加了 Response.End() ,它似乎对事件发布后页面的操作没有不利影响。为什么 Server 2008 的行为不同,仍然有点神秘!

于 2013-03-24T23:54:07.237 回答