我有一个视图,我从Jqgrid中的一行获取信息,然后使用该信息作为参数对控制器进行ajax调用。参数被传递给控制器,但是当它没有执行我想要的动作时,我正在尝试创建一个csv文件。
查看:
function sendParams() {
var selId = jQuery("#list").jqGrid('getGridParam','selrow');
var data = jQuery("#list").jqGrid('getRowData',selId);
$.ajax({
type: "GET",
url: '@Url.Action("ExportToExcel","Home")',
data: {sidx: 'abcd', sord: 'desc', page:1, rows: 100, id: data.selId, rid: data.id, process: data.process, detail_table: data.detail_table, jobGroup: @Html.Raw(Json.Encode(@ViewBag.jobGroup)), date: @Html.Raw(Json.Encode(@ViewBag.DateSelected))},
contentType: "application/json; charset=utf-8",
});
}
<button onclick="function sendParams()">Export</button>
控制器
public ContentResult ExportToExcel(String sidx, String sord, int page, int rows, String id, String process, String detail_table, String jobgroup, String date)
{
var sw = new StringWriter();
List<myModel alist = DAL.ExportExcelConn2.SelectGridItems(sidx, sord, page, rows, rid, process, detail_table, jobgroup, date);
foreach (var item in alist)
{
sw.WriteLine(String.Format("{0}, {1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16}", item.abc, item.sstuff, item.stuff2, item.stuff3, item.stuff4, item.stuff5, item.stuff6, item.stuff7, item.stuff8, item.stuff9, item.stuff10, item.stuff11, item.stuff12, item.stuff13, item.stuff14, item.stuff15, item.stuff16));
}
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=Exportabc" + DateTime.Now + ".csv");
Response.ContentType = "text/csv";
Response.Write(sw);
Response.End();
return Content("Test");
}
答案 0 :(得分:0)
如果您使用$.ajax
来电,则可以在success
或error
回调中处理服务器响应。返回CSV或Excel数据时您真正需要的是设置新的window.location
。
例如
window.location = '@Url.Action("ExportToExcel","Home")' + '?' +
$.param({
sidx: 'abcd',
sord: 'desc',
page:1,
rows: 100,
id: data.selId,
... // -- all other options
});
如果网页浏览器会自动在计算机上打开程序(如Excel)。
我建议你另外阅读包含ASP.NET MVC Project的the answer,它将数据导出到Excel(真正的XLSX文件)。