【问题标题】:how to set postData in jqgrid AFTER it has been constructed?构建后如何在jqgrid中设置postData?
【发布时间】:2011-09-05 07:33:09
【问题描述】:

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

我试着跑了

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

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

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

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

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

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

更新:这个 .setGirdParam 函数无缘无故地开始为我工作,所以如果有人能提供一些见解,什么可以阻止它工作,我会接受答案。 谢谢

【问题讨论】:

    标签: jquery jqgrid jqgrid-asp.net


    【解决方案1】:

    您的问题中没有包含 jqGrid 的定义,我们无法看到调用setGridParam位置。首先你应该使用setGridParam after jqGrid 创建,但before 请求将被发送。如果您将更改postData 下一个 jqGrid 请求可以使用新参数。所以通常使用

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

    here

    我想对你来说最好的选择是使用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 ...
    });
    

    详情请见here。通过这种方式,您几乎可以实现任何场景。

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

    【讨论】:

    • 感谢 test:function() 部分,这将很有帮助,否则,我已经按照您编写的顺序实现了所有内容。它现在有效,但不是一开始,我不知道我改变了什么:)
    • @obrad:您没有发布您当前使用的代码。如果某些东西“一开始”不起作用,您应该检查哪些代码“一开始”确实起作用。我认为您可能会遇到此类问题,并在我的回答中包含使用 datatype'local' 的部分,这将阻止第一次加载网格。在知道您需要在test:function() 内部使用的值之后,您可以将datatype 更改为'json' 并使用.trigger('reloadGrid',...) 强制加载网格。
    • 我没有发布它,因为它是生成的,但假设我应该发布生成的代码。但是,它现在有效。感谢您的帮助。
    • @obrad:不客气!我更喜欢有一个代码示例,因为 jqGrid 有太多的选项和许多“不重要”的选项,这些选项不会包含在问题中,可能需要重写解决方案。例如分组、treegrids、subgrids、xml 或 json、本地或远程数据或关于loadonce:true、'multiselect:true'、不同版本的编辑模式(单元格、内联和表单编辑)等的混合。所以人们不得不猜测或提出许多额外的问题。无论如何,您的问题都已解决,我很高兴看到这一点。
    【解决方案2】:
    $("#grid id").setGridParam({ postData: {data:dataval} });
    $("#grid id").trigger('reloadGrid', [{page:1,data:dataval}]);ntn
    

    【讨论】:

      【解决方案3】:

      这是我使用的方法

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

      【讨论】:

      • 包装一个全局 var 以从类似的函数返回非常完美,以便触发器 reloadGrid 拉取 var 的当前值,而不是它在第一次创建网格时的值。 tks。因此,如果我有 var testvals,那么 postdata 将是这样的: postData: { 'testKey': function () { return testvals ; } },
      猜你喜欢
      • 2011-06-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2016-05-19
      相关资源
      最近更新 更多