11

MVC 3を使用していますダウンロード用のCSVファイルを動的に作成したいのですが、MVC指向の正しいアプローチがわかりません。

従来のASP.netでは、次のように記述していました。

Response.ClearHeaders();
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", attachment;filename='Test.csv'");
Response.Write("1,2,3");
Response.End();

アクションをContentResult確認しましたが、結果を文字列として作成する必要があるようです。

return Content(myData, "text/csv");

文字列を作成することはできたと思いますが、これらのファイルは数千行の長さになる可能性があるため、これは私には非効率的です。

誰かが私を正しい方向に向けることができますか?ありがとう。

4

4 に答える 4

15

私はこの問題に対する1つの可能な解決策を見つけました。EmptyResult()を返し、応答ストリームに直接書き込むアクションメソッドを定義するだけです。例えば:

public ActionResult RobotsText() {
    Response.ContentType = "text/plain";
    Response.Write("User-agent: *\r\nAllow: /");
    return new EmptyResult();
}

これは問題なく動作するようです。'MVC'がどのようになっているのかわからない...

于 2011-09-02T17:38:28.610 に答える
8

私は昨日同様の問題に時間を費やしました、そしてこれが正しい方法でそれをする方法です:

public ActionResult CreateReport()
{
    var reportData = MyGetDataFunction();
    var serverPipe = new AnonymousPipeServerStream(PipeDirection.Out);
    Task.Run(() => 
    {
        using (serverPipe)
        {
             MyWriteDataToFile(reportData, serverPipe)
        }
    });

    var clientPipe = new AnonymousPipeClientStream(PipeDirection.In,
             serverPipe.ClientSafePipeHandle);
    return new FileStreamResult(clientPipe, "text/csv");
}
于 2015-06-05T15:54:40.987 に答える
3

次のいずれかを返してみてください:http FileResult//msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx

この例も参照してください:http://forums.asp.net/t/1491579.aspx/1

于 2011-08-23T18:46:07.243 に答える
-2

次のようなものを試してください。

public ActionResult CreateReport(string report, string writer)
{
    var stream = new MemoryStream();
    var streamWriter = new StreamWriter(stream);

    _generateReport.GenerateReport(report, writer);

    streamWriter.Flush();
    stream.Seek(0, SeekOrigin.Begin);

    return new FileStreamResult(stream, writer.MimeType);
}
于 2013-10-02T16:18:05.483 に答える