2011-07-19 13 views
2

私はHTMLTextwriterを使用してExcelファイルを作成することができましたが、返されるファイルはJavascript関数になっています。ASP.net MVC Excelをダウンロード

ビューコードは:であるExcelファイル

$.ajax({ 
    type: "GET", 
    url: "/Search/ExportToExcel", 
    data: { //parameters  }, 
    error: function (error) { 
     alert(error.responseText); 
    }, 
    success: function (data) { 
     alert("success"); 
     alert(data); 
    } 
}); 

<input type="submit" id = "exportExcelBtn" class = "searchButton" value="Export To Excel" 
onclick= "ExportToExcel();"/> 

JS関数は、制御動作に必要なデータを取得し、その後のような関連するアクションを呼び出しますActionResultから派生して作成され、JSメソッドに返されます。作成されたExcelファイルは、次のようにブラウザに書き込まれます。

HttpContext context = HttpContext.Current; 
      context.Response.Clear(); 

      context.Response.AddHeader("content-disposition", "attachment;filename=" + fileName); 
      context.Response.Charset = ""; 

      context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 

      context.Response.ContentType = contentType; 
      context.Response.Write(content); 
      context.Response.End(); 

どうすればそのファイルをユーザーのコンピュータにダウンロードできますか?

私は簡単にモデルメソッドでFile.WriteAllTextを使用することができますが、私はMVCメソッドを浮気していると感じていますか?

+0

リンクを持つリソースにリダイレクトする必要があります。なぜアクションにリンクしないのですか? – dknaack

+0

@dknaack、あなたはアクションからビューへの直接のリンクですか? –

+0

はい、どうしてですか。 ActionResultが応答するコンテンツタイプが優れている場合、ユーザーは現在のページにとどまり、ダウンロードダイアログが表示されます。 – dknaack

答えて

3

File.WriteAllTextをモデルに使用することはできません。
これはサーバーに書き込みます。

locationには、Excelファイルの内容を返すURLを設定する必要があります。
MVCで行う正しい方法は次のとおりです。return File(content,"application/x-ms-excel", fileName)

+0

@ Slaks、ありがとう。何の場所?申し訳ありませんが、私は1週間ほどウェブ開発を行っています:) –

+0

JavaScriptの 'location'プロパティは、現在のブラウザタブの場所を設定します。 – SLaks

3

あなたはAJAX要求への応答としてExcelファイル自体を送信しています。これにより、ファイルを認識して解析する必要があります。さらに重要なことは、ファイルをディスクに保存することです。これは不適切です(おそらく、不可能です)。

AJAXを取り除き、別のブラウザのウィンドウで/Search/ExportToExcelのリンクを開くことをお勧めします。その後、ブラウザ(JSではなくブラウザ)がファイルを受信して​​保存します。

関連する問題