我如何使用Jquery / Ajax将参数传递给MVC控制器中的CSV导出方法

时间:2016-02-10 11:13:56

标签: jquery ajax csv fileresult

在我的视图中,我有一个按钮,用于以CSV格式导出当前数据视图。这是控制器中方法的简单链接。

<input type="button" value="Exporter" id="btnexport" class="btnsearch" onclick="location.href='@Url.Action("ExportCSV", "AuditAddins")'" />

控制器方法

public void ExportCSV()
{
    auditAddins = AddinsCache.AuditAddinsCache;
    var sw = new StringWriter();
        sw.WriteLine(String.Format("{0};{1};{2};{3};{4}", "Date", "AddinName", "IsAddinActive", "UserName", "PcName"));
        foreach (var record in auditAddins)
        {
            sw.WriteLine(String.Format("{0};{1};{2};{3};{4}", record.Date, record.AddinList.AddinName, record.IsAddinActive, record.Users.UserName, record.Pc.PcName));
        }
        Response.Clear();
        Response.AddHeader("Content-Disposition", "attachment; filename=Export.csv");
        Response.ContentType = "text/csv";
        Response.Write(sw);
        Response.End();
}

运作良好。但是我需要向这个方法发送一个参数,因为我有三个设计模式,每个都有自己的列顺序。所以我创建了一个jquery / ajax脚本来发送参数。

$("#btnexport").click(function () {
    var index = $('#CritID').find('option:selected').val();
    var d = { chx: index}
    $.ajax({
        url: "/AuditAddins/ExportCSV",
        type: "POST",
        data: d,
        success: function (data) {
            alert("Export ok !");
        },
    });
});

主要目标是更改导出方法:

 public void ExportCSV(int chx)
    {
        ...
        switch (chx)
        {
            case 1:
                sw.WriteLine(String.Format("{0};{1};{2};{3};{4}", "Date", "AddinName", "IsAddinActive", "UserName", "PcName"));
                break;
            case 2:
                sw.WriteLine(String.Format("{0};{1};{2};{3};{4}", "Date", "UserName", "PcName","AddinName", "IsAddinActive"));
                break;
            ...
        }

问题是我不再拥有IE下载窗口了。我尝试过使用actionresult方法,但它也没有用。

1 个答案:

答案 0 :(得分:0)

您不必使用POST发送参数。

相反,您可以向GET请求添加参数:

/AuditAddins/ExportCSV?index=2

,如果未提供参数,则默认为1.

要发送多个参数,您可以使用&分隔它们:

/AuditAddins/ExportCSV?index=2&param2=123

这也应解决下载窗口的问题。