ASP.NET MVC5通过传递参数从jQuery启动动态文件下载

时间:2015-04-11 12:29:02

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

在asp mvc 5中,我使用该代码启动下载:

//jQuery
 $(document).on('click', "#download_export", function (e) {
        window.location = url_download;
    });

//c#
 public FileResult GetFile()
        {
            return File(Encoding.UTF8.GetBytes("dfdfdf dfssdfdfs"),
                   "text/plain",
                    "test.txt");
        }

它可以在客户端浏览器上运行并触发txt文件下载。

我想通过从控制器传递文件内容来做同样的事情,

我试过了:

    $(document).on('click', "#download_export", function (e) {
     $.get(url_download,
            {
                content : 'this is my content'
            }
            , function (data) {
                     console.log('works')
        });
   });

 public FileResult GetFile(string content)
        {
            return File(Encoding.UTF8.GetBytes(content),
                   "text/plain",
                    "test.txt");
        }

我看到调试器已达到Action但它没有触发下载,

你知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

我担心你无法用ajax下载文件。 由于安全原因,javascript不允许访问本地文件系统。想象一下,远程站点的js试图窃取你电脑上的文件。

尝试:

$(document).on('click', "#download_export", function (e) {
        window.location = url_download + "?content=this is my content";
    });

或者您可以在页面上创建隐藏的iframe以下载文件,以避免更改当前窗口的位置。

$(document).on('click', "#download_export", function (e) {
            $("#yourIframe").attr("src",url_download + "?content=this is my content");
        });

答案 1 :(得分:0)

如果您想要dynamic download,那么您可以使用 - > $ .filedownload jquery插件用于这些目的。简单用法:

var promise = $.fileDownload(url_download+"?content=yourContentHere");