MVC 3でHttpContect応答ストリームを返すjQuery UIダイアログの呼び出しアクション

私は、HttpContextレスポンスとしてExcelファイルを返すためのカスタムコントローラエクステンションを持っています。

私のコントローラの動作は次のとおりです。

public ActionResult ExportToExcel()
{
    return this.Excel(headers, results, filename);
}

これは、通常のMVCコールバックで完全に機能します。

私はユーザーがファイル名を入力し、エクスポートを押すことができるjQueryのUIダイアログを作成しようとしています。 [エクスポート]ボタンをクリックすると、コントローラでMVCアクションが呼び出されますが、ファイルがブラウザで応答されません。

私のダイアログコードは:

$("#export-excel").dialog({
            autoOpen: false,
            modal: true,
            title: "Export to Excel",
            buttons: {
                Export: function() {
                    $.post("/Search/ExportToExcel",
                    function() {
                        $("#export-excel").dialog("close");
                    });
                }
            }
        });

        $("#export-excel-button").click(function() {
            $("#export-excel").dialog("open");
            return false;
        });

そして、html:

<div id="export-excel" style="display: none;">
    Filename:
    <input type="text" value="Results.xls"/>
</div>
<input type="button" value="Export" id="export-excel-button" />
1

2 答え

問題は、ファイルデータをAJAX関数として返すアクションを呼び出したことです。

通常のブラウザーのダウンロード動作を開始させるには、ブラウザーにアクションを要求するように強制する必要があります。

最も簡単な方法はjavascriptのwindows.location.hrefプロパティを設定することです:

buttons: {
     Export: function() {
         $("#export-excel").dialog("close");
         window.location = "/Search/ExportToExcel?...

sidenote: Url.Action()を使用して、アクションのURLを生成する必要があります。

3
追加された
優れたもの、ありがとう。そして、あなたはUrlについて正しいです。アクション - 私は余裕がありません。
追加された 著者 pfeds,