在mvc3中没有提示FileResult

时间:2013-01-29 06:30:14

标签: c# asp.net-mvc asp.net-mvc-3 jquery fileresult

我在vs 2010中创建MVC 3应用程序。我尝试在filder中下载文件。

这是我在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"));

});

单击“下载”按钮时,此功能被正确触发。 但是没有提示文件下载窗口。

请帮忙。

1 个答案:

答案 0 :(得分:3)

不,您无法使用AJAX请求下载文件。您需要将浏览器重定向到目标网址,而不是发送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函数的第3个参数):

return File(@"c:\reports\foo.pdf", "application/pdf", "foo.pdf");