如何在构造jqgrid后设置postData?

我从模型类生成我的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函数开始为我工作没有明显的原因,所以如果有人可以提供一些可以阻止这种工作的见解,我会接受回答。 谢谢

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

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

看到这里 。

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

 $("#@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 ... }); 

详情请见此处 。 通过这种方式,您几乎可以实现任何方案。

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

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

这是我使用的方法

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