0

vs 2010 で MVC 3 アプリケーションを作成します。ファイルをダウンロードしようとしました。

これは MVC での私のアクションです。私のコードを見てください。

    //[HttpPost]
    public FileResult Download(string url, string cnt)
    {
        if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(cnt))
        {
            return File(url, cnt);
        }
        else
        {
            return null;
        }

    }



 <input type="button" id="@(Model.ControlID)_bio_view" class="changepasswordbutton" value="View" />

そして、.cshtml ファイルに jQuery 関数を作成します。

 function ViewFile(url, cnt) {
    $.post('@(Url.Action("Download"))?url=' + url + '&cnt=' + cnt)
}
 $('#@(Model.ControlID)_bio_view').click(function (e) {

    ViewFile($('#bio_file_url').val(), $('#bio_file_url').attr("cnttype"));

});

ダウンロードボタンをクリックすると、この関数が正しく起動されます。ただし、ファイルのダウンロード ウィンドウは表示されません。

助けてください。

4

1 に答える 1

3

いいえ、AJAX リクエストを使用してファイルをダウンロードすることはできません。AJAX リクエストを送信する代わりに、ブラウザーをターゲット URL にリダイレクトする必要があります。

function ViewFile(url, cnt) {
    window.location.href = '@(Url.Action("Download"))?' + 
        'url=' +  encodeURIComponent(url) + 
        '&cnt=' + encodeURIComponent(cnt);
}

また、File関数は最初の引数として、次のようなファイルへの絶対物理パスを想定していることにも注意してください。

public ActionResult Download(string url, string cnt)
{
    if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(cnt) && File.Exists(url))
    {
        return File(url, cnt);
    }
    return HttpNotFound();
}

また、ダウンロードするファイルを要求する場合は、ファイル名を指定する必要があります (File 関数の 3 番目の引数)。

return File(@"c:\reports\foo.pdf", "application/pdf", "foo.pdf");
于 2013-01-29T06:31:20.413 に答える