0

我正在尝试根据 jqgrid 中的复选框生成 pdf。我从表单数据中向 MVC 控制器发布信息,并从复选框中添加一些自定义序列化数据,然后控制器返回一个文件。

 data: $("#filter_form").serialize() +"&"+ $.param({"s" : items}),

当我使用 jquery 发布数据时,我无法将成功数据返回到浏览器以保存文件。将其添加到 url 的数据太多,但是当我这样做时,我成功下载了文件。例如 https://www.example.com/controller/action/?data=abc&data=def工作正常,但由于 url 中的数据量,它不是一个解决方案。

我希望我可以只使用普通的表单帖子,但由于我从复选框手动序列化一些数据,我能够弄清楚如何动态地将数据添加到表单帖子。

最坏情况的解决方案:我将数据发布到控制器,然后控制器将返回一个临时 URL 或密钥。然后我可以打开一个带有临时 url 的新窗口或要求用户单击它的 url。我希望有一个更快的解决方案。

我是 javascript 世界的新手。所以我希望有一个我错过的简单解决方案。它必须与 IE 7 兼容。

4

1 回答 1

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 );
            }
        });
于 2013-05-29T15:15:31.557 回答