如何在构造jqgrid后设置postData?

时间:2011-05-31 08:43:18

标签: jquery jqgrid jqgrid-asp.net

我从模型类生成我的jqgrid,我将其传递给视图。我得到了构建和工作jqgrid。但是,在我调用helper创建jqgrid之后,我想在一个视图上设置postData,我使用jqGrid,在该视图中使用脚本,而不必更改创建jqgrid的整个局部视图。

我试过了

$("#@Model.Id").jqGrid('setGridParam', { postData: { test: 233} });

$("#@Model.Id").setGridParam({ postData: { test: 233} });

但没有错误或任何结果。如果我在jqgrid参数中设置postData(在部分视图中构造它,它可以工作。

我还检查了网格是否存在,添加了

console.log($("#@Model.Id").size());

在第一行之前,它显示为1。

更新:这个.setGirdParam函数开始为我工作没有明显的原因,所以如果有人可以提供一些可以阻止这种工作的见解,我会接受回答。 感谢

3 个答案:

答案 0 :(得分:11)

您没有在问题中包含jqGrid的定义,我们看不到调用setGridParam地点。首先,您应该在创建jqGrid之后使用setGridParam ,但之前将发送请求。如果您要更改postData ,则下一个 jqGrid请求可以使用新参数。所以通常使用

$("#@Model.Id").trigger('reloadGrid', [{page:1}]);

请参阅here

我认为最好的选择是使用test的函数postData属性作为函数:

$("#@Model.Id").jqGrid({
    // ... other jqGrid parameters ...
    postData: {
        test: function() {
            // the code can by dynamic, read contain of some elements 
            // on the page use "if"s and so on and return the value which 
            // should be posted to the server
            return 233;
        }
    }
    // other jqGrid parameters ...
});

有关详细信息,请参阅here。通过这种方式,您几乎可以实现任何方案。

顺便说一下,如果你不希望jqGrid在事件发生之前向服务器发送任何请求,你可以在初始化时使用datatype:'local'。然后,如果您希望填充网格,可以使用setGridParamdatatype'local'更改为'json'(或'xml')并调用{{ 1}}。

答案 1 :(得分:2)

$("#grid id").setGridParam({ postData: {data:dataval} });
$("#grid id").trigger('reloadGrid', [{page:1,data:dataval}]);ntn

答案 2 :(得分:1)

这是我使用的方法

postData: { 'testKey': function () { return 'testvals'; } },