【问题标题】:Trouble creating csv for download无法创建用于下载的 csv
【发布时间】:2010-08-23 20:48:27
【问题描述】:

使用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 数据。什么给了?

【问题讨论】:

  • 你能解释一下为什么另一个答案对你的问题是正确的而不是我的吗?只是出于好奇。

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


【解决方案1】:

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

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

编辑...

查看文档后,而不是依赖我的记忆,HttpApplication 对象似乎没有在标准 ASP.NET 页面中公开,在这种情况下,您可能需要使用 @987654322 @ 反而。不理想,但它会解决问题。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      相关资源
      最近更新 更多