我需要向MVC控制器发送500个GUID,根据此Id获取一些数据并返回excel表。我的控制器上有一个POST方法
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ExportToExcel(List<string> contractIds)
{
var contracts = SearchContracts.ExportToExcel(string.Join(",", contractIds));
byte[] filecontent = ExcelExportHelper.ExportExcel(contracts, "Report", false, null);
return File(filecontent, ExcelExportHelper.ExcelContentTypeXlsx, "Report.xlsx");
}
如果我采用AJAX方式,我需要使用AJAX type: "POST"
,一切看起来都不错,但没有文件返回给客户端:
function exportToExcel() {
var selectedContractsId = getSelectedContracts();
$.ajax({
type: "POST",
url: "@Url.Action("ExportToExcel", "Search")",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(selectedContractsId),
dataType: "json"
});
}
如果我将其作为标准MVC操作并将控制器方法更改为HttpVerbs.Get
,则将文件返回给客户端但是我遇到URL Too Long异常的问题并且更新了Web.config maxUrlLength
参数是不适合我,因为500 GUID不是最大的,你可以选择例如10000个GUID,查询字符串中有370 000个字符。
function exportToExcel() {
var selectedContractsId = getSelectedContracts();
location.href = '@Url.Action("ExportToExcel", "Search")?contractIds=' + selectedContractsId;
}