Javascript 下载基于自定义序列化数据生成的文件
我正在尝试根据jqgrid中的复选框生成pdf。我将表单数据中的信息发布到MVC控制器,并从复选框中添加一些自定义序列化数据,然后控制器返回一个文件Javascript 下载基于自定义序列化数据生成的文件,javascript,jquery,post,Javascript,Jquery,Post,我正在尝试根据jqgrid中的复选框生成pdf。我将表单数据中的信息发布到MVC控制器,并从复选框中添加一些自定义序列化数据,然后控制器返回一个文件 data: $("#filter_form").serialize() +"&"+ $.param({"s" : items}), 当我使用jquery发布数据时,但我无法将成功数据返回到浏览器以保存文件。有太多的数据添加到url,但当我这样做时,我成功地下载了文件。例如,它工作得很好,但由于url中的数据量,它不是一个解决方案 我希望
data: $("#filter_form").serialize() +"&"+ $.param({"s" : items}),
当我使用jquery发布数据时,但我无法将成功数据返回到浏览器以保存文件。有太多的数据添加到url,但当我这样做时,我成功地下载了文件。例如,它工作得很好,但由于url中的数据量,它不是一个解决方案
我希望我可以使用一个普通的表单post,但是由于我正在从复选框手动序列化一些数据,所以我能够想出如何动态地将数据添加到表单post
最坏的解决方案:我将数据发布到控制器,然后控制器将返回一个临时URL或密钥。然后我可以打开一个带有临时url的新窗口,或者让用户单击它的url。我希望有一个更快的解决办法
我是javascript世界的新手。所以我希望有一个我错过的简单解决方案。它必须与IE 7兼容 这是可行的,但不知道这是否是最好的解决方案 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 );
}
});
//存储过滤器
$.ajax({
键入:“获取”,
url:“”,
数据:$(“#过滤器形式”).serialize()+”&“+$.param({“s”:items}),
成功:功能(数据){
//基于存储筛选器的请求文件
ifrm.src='';
},
错误:函数(请求、错误)
{
警报(“错误:+错误”);
}
});
。要向表单添加数据,为什么不使用隐藏的
?