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 请求下载文件。您需要将浏览器重定向到目标 url 而不是发送 AJAX 请求:

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 函数的第三个参数):

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