在我的视图中,我有一个用于在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下载窗口了。我已经尝试过操作结果方法,它也不起作用。
您不必使用 POST
来发送参数。
相反,您可以向GET
请求添加参数:
/AuditAddins/ExportCSV?index=2
如果未提供参数,则默认为 1。
要发送多个参数,可以使用&
将它们分开:
/AuditAddins/ExportCSV?index=2¶m2=123
这也应该解决下载窗口的问题。