传递长参数时jqgrid return错误404

jqgrid return error 404 when pass long parameter

嗯,当我的get方法中的参数很短时,我的表单中的jqgrid工作正常。
但是当我的参数这么长的时候

感谢并抱歉我的英语不好
编辑
这是我的代码:

jQuery("#jqGridReport").jqGrid({
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
direction: 'rtl',
url: 'Handler/BrnTotal.ashx',
datatype: "local",
colNames: ['blah','blah','blah'],
colModel: ['blah','blah','blah',],
        rowNum: 50,
        mtype: 'POST',
        loadonce: true,
        pager: '#jqGridReportPager',
        sortname: 'BRName',
        viewrecords: false,
        pgtext: null,
        sortorder: 'desc',
        caption: "شعب",
        hidegrid: false,
        scrollOffset: 0,
        autowidth: true,
        altRows: true,
        altclass: 'myAltRowClass'
    });
    jQuery("#jqGridReport").jqGrid('navGrid', '#jqGridReportPager', { edit: false, add: false, del: false });
    jQuery("#jqGridReport").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: false, defaultSearch: "cn" });


first.when 用户 select 参数和提交按钮处的网格为空,此方法将 运行

branchlist = idsel.join(",");
        selectedBrnWork = $('#hiddenField').val();
        startDate = $("#txtStartDate").val();
        endDate = $("#txtEndDate").val();
        $("#jqGridReport").jqGrid('setGridHeight', 'auto');
        var newurl = 'Handler/BrnTotal.ashx?startDate=' + startDate + "&endDate=" + endDate + "&brlist=" + branchlist + "&selectedBrnWork=" + selectedBrnWork;
        $("#jqGridReport").jqGrid('setGridParam', { url: newurl });
        $("#jqGridReport").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
        $("#element_to_pop_up").bPopup().close();


这是请求 header 工作时:

POST /Handler/BrnTotal.ashx?startDate=1394/05/26&endDate=1394/05/26&brlist=32,50,61&selectedBrnWork=1 HTTP/1.1

这是它不起作用的时候:

POST /Handler/BrnTotal.ashx?startDate=1394/05/26&endDate=1394/05/26&brlist=32,50,61,73,84,92,103,148,149,160...,...,...,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2124,2175,2176,2177,2178,2179,2180,2181,2182,2183&selectedBrnWork=1 HTTP/1.1


我做空 brlist 因为它太长了

在我看来,这个问题与 jqGrid 无关。如果您需要向 WebMethod 发送许多(或长)参数,您应该使用 HTTP POST 而不是 HTTP GET,因为 GET 请求的参数将附加到 URL。 URL 大小有限制。 URL 的确切最大长度取决于您使用的网络浏览器。安全限制约为 2000 个字符(参见 the answer 示例)。

因此,如果未指定 mtype,我建议您使用 mtype: "POST" 而不是 jqGrid 默认使用的 mtype: "GET"

更新: 你发送参数的方式不对。发布的代码只是将参数 startDateendDatebrlist 明确地 添加到 URL。这是错的。数据应在 POST 请求的正文中发送。您应该为此使用 jqGrid 的 postData 参数。我建议您使用函数形式的 postData

url: 'Handler/BrnTotal.ashx',
datatype: "json",
mtype: 'POST',
postData: {
    startDate: function () { return $("#txtStartDate").val(); },
    endDate: function () { return $("#txtEndDate").val(); },
    brlist: function () {
        var idsel = jQuery("#jqGridReport").jqGrid("getGridParam", "selarrrow");
        return idsel.join(",");
    },
    selectedBrnWork: function () { return $('#hiddenField').val(); }
}