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 データを応答バッファーに送信します。ただし、メソッドの実行が終了すると、残りのページ ライフサイクルが続行され、通常のページ マークアップが応答バッファーに送信されます。これが、CSV に HTML を追加した理由です。

これを防ぐには、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 に答える