【问题标题】:FileResult is not prompt in mvc3FileResult 在 mvc3 中没有提示
【发布时间】:2013-01-29 14:31:20
【问题描述】:

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

});

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

请帮忙。

【问题讨论】:

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


    【解决方案1】:

    不,您不能使用 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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 2014-06-03
      • 2020-07-14
      相关资源
      最近更新 更多