2011-12-22 15 views
2

MVCプロジェクトでは、クリックするとユーザーに関連付けられた任意の数のオブジェクト(Listとして提供)を取得し、オブジェクトの属性のCSVファイルを動的に作成するActionLinkを使用していますダウンロードを促す。ファイルはサーバー上に残すべきではないので、ダウンロード後に削除するか、ストリームなどからダウンロードする必要があります。これについてどうやって行くのが一番ですか?私は手動でCSV文字列をコンパイルし、コントローラ内でHttpResponse.Write(String)を使用する例を見てきましたが、このベストプラクティスですか?あなたは、ストリームを持っている場合は動的CSVファイルのダウンロード

答えて

4

私はこれに似た機能を持っています。私はあなたがそれを渡すUserオブジェクトの各メンバーを自動的に見つける "より良い"方法があると確信していますが、このように動作します。

public ActionResult ExportCSV(List<User> input) 
    { 
     using (MemoryStream output = new MemoryStream()) 
     { 
      using (StreamWriter writer = new StreamWriter(output, Encoding.UTF8)) 
      { 
       foreach (User user in input) 
       { 
        writer.Write(user.firstattribute); 
        writer.Write(","); 
        writer.Write(user.secondattribute); 
        writer.Write(","); 
        writer.Write(user.thirdattribute); 
        writer.Write(","); 
        writer.Write(user.lastattribute); 
        writer.WriteLine(); 
       } 

       writer.Flush(); 
      } 

      output.Position = 0; 

      return Controller.File(output, "text/comma-separated-values", "report.csv"); 
     } 
    } 
+0

また、この方法では、各属性がカンマなしの単純な文字列であることが前提です – Brandon

0

手動で文字列を組み立てる必要があり、その後、return Content(str, "text/csv");

0

LINQ to CSVは、CSVコンテンツを生成するための素晴らしいライブラリです。あなたのCSVを生成したら、の方法をControllerにして、あなたの行動からFileStreamResultを返してください。 FileStreamResultかその他のタイプのStreamのいずれでも、任意のストリームを応答として送信することができます。

関連する問題