根据自定义序列化数据下载生成的文件

时间:2013-05-29 14:52:32

标签: javascript jquery post

我正在尝试根据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兼容。

1 个答案:

答案 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 );
            }
        });