使用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数据。是什么给了什么?
答案 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 & """")