无法创建下载csv

时间:2010-08-23 20:48:28

标签: .net asp.net csv httpresponse content-disposition

使用this lovely example我得到了一些时髦的结果。我所拥有的是:

Protected Sub btnCSV_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCSV.Click

    Response.Clear()
    Response.Buffer = True
    Response.ContentType = "text/csv"
    Response.AppendHeader("Content-Disposition", "inline; filename=" + FileName + ".csv")

    CsvHelper.ProduceCSV(dt, Response.Output, True)

End Sub

但是发生的事情是csv文件包含来自页面的html输出以及来自CsvHelper的csv数据。是什么给了什么?

2 个答案:

答案 0 :(得分:2)

单击btnCSV时,事件处理程序方法会将CSV数据发送到响应缓冲区。但是一旦方法完成执行,页面生命周期的剩余部分就会继续,将正常的页面标记发送到响应缓冲区。这就是您将CSV附加到CSV的原因。

为了防止这种情况,您需要在生成CSV数据后立即结束请求。您可能希望在ProduceCSV来电后致电Application.CompleteRequest或类似电话。

修改...

看了一下文档,而不是依赖我的内存,似乎HttpApplication对象没有在标准的ASP.NET页面中公开,在这种情况下你可能需要使用而是Response.End。不理想,但它会做到这一点。

答案 1 :(得分:1)

点击后你想要显示正常页面+提供你创建的文件,是吗? 稍有不同:使用attachtment代替inline

Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", _
  "attachment; filename=""" & filename & """")