1

使用这个可爱的例子,我得到了一些时髦的结果。我所拥有的是:

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 数据。是什么赋予了?

4

2 回答 2

2

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

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

编辑...

在查看文档之后,而不是依赖我的记忆,似乎该HttpApplication对象没有在标准 ASP.NET 页面中公开,在这种情况下,您可能需要使用它Response.End。不理想,但它会做的伎俩。

于 2010-08-23T20:50:48.787 回答
1

单击后您要显示正常页面+提供您创建的文件,是吗?有一点不同:使用attachtment而不是inline.

Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", _
  "attachment; filename=""" & filename & """")
于 2010-08-24T03:57:57.057 回答