我正在尝试根据jqgrid中的复选框生成pdf。我从表单数据发布信息MVC控制器,然后从复选框中添加一些自定义序列化数据,然后控制器返回一个文件。
data: $("#filter_form").serialize() +"&"+ $.param({"s" : items}),
当我使用jquery发布数据时,但我无法将成功数据反馈给浏览器以保存文件。将数据添加到网址中的数据太多,但是当我这样做时,我成功下载了该文件。例如https://www.example.com/controller/action/?data=abc&data=def工作正常,但由于网址中的数据量不足以解决问题。
我希望我可以使用普通的表单帖子,但由于我是从复选框手动序列化一些数据,因此我能够弄清楚如何动态地将数据添加到表单帖子。
最坏情况解决方案:我将数据发布到控制器,然后控制器将返回临时URL或密钥。然后我可以打开一个带有临时URL的新窗口,或者让用户点击它的URL。我希望有一个更快的解决方案。
我是javascript世界的新手。所以我希望有一个我错过的简单解决方案。它必须与IE 7兼容。
答案 0 :(得分:0)
这有效,但不知道它是否是最佳解决方案
MVC4控制器动作
//temp store the data because of the custom serialization. Its not possible
//for ajax post to save file and we cant do it the normal way due to the checkboxes
[Authorize]
public void GenerateReport(ContractMaterialFiltersViewModel filters)
{
Session["filter"] = filters;
}
[Authorize]
public FileStreamResult Report()
{
ContractMaterialFiltersViewModel filters = Session["filter"] as ContractMaterialFiltersViewModel;
if (filters == null) new Exception("No request data");
....
}
现在为Javascript方面
//store the filters
$.ajax({
type: "GET",
url: '<%= Url.Action( "GenerateReport", "GovContractMaterial" ) %>',
data: $("#filter_form").serialize() +"&"+ $.param({"s" : items}),
success: function (data) {
//request file based on stored filters
ifrm.src = '<%= Url.Action( "Report", "GovContractMaterial" ) %>';
},
error: function(request,error)
{
alert ( "Error: " + error );
}
});