1

我正在使用 JQSuite 的 Trirand.Web.MVC dll 将 JQGrid 集成到我的 MVC 3 应用程序中。

我正在使用 JQGrid 的 HTML 助手,所以在我的视图中我有以下内容:

@Html.Trirand().JQGrid(Model.MyGrid, "Grid")

我知道我可以使用以下代码在单击按钮时重新加载网格:

$("#Grid").trigger("reloadGrid");

这将重新加载网格,调用我在控制器代码中指定的 Action 方法来设置 JQGrid。

我在用于搜索/过滤的页面上有其他控件,这些控件可以很好地传递给操作方法。

我找到了 setGridParam 方法,这似乎表明您可以执行以下操作:

$("#Grid").setGridParam({ someParam: 'blah' }).trigger("reloadGrid");

或这个:

$("#Grid").jqGrid('setGridParam', { postData: { someParam: 'somevalue'} }).trigger("reloadGrid");

但是我的操作方法上的 someParam 参数没有填充任何一种方法

如何在 JQGrid 上设置这些,以便在重新加载时被 Action 方法拾取?

更新:我现在已经为另一个参数尝试了这种方法,它确实有效!

所以现在我有:

$("#Grid").jqGrid('setGridParam', { postData: {
            someParam: 'somevalue', 
            paramTwo: ' some value',
            paramThree: 'some other value'
        } }).trigger("reloadGrid");

someParam 不起作用,但 paramTwo 和 ParamThree 确实起作用。

奇怪的!

什么可以阻止一个参数工作?

UPDATE2: 使用奥列格的建议如下:

var myGrid = jQuery("#Grid").jqGrid({                
                postData: {
                    someParam: function () { return $("#txtBox1").val(); },
                    paramTwo: function () { return $("#txtBox2").val(); },
                    paramThree: function () { return $("#txtBox3").val(); }
                }
            });

        myGrid.trigger('reloadGrid'); 

...没有任何值通过。我已经验证了 JQuery 在重新加载之前返回了正确的值。

4

2 回答 2

2

如果我理解你是正确的,你可以使用postData参数向服务器发送额外的参数。最简单的方法是使用postData具有方法(属性作为函数):

postData: {
    myCustomParam: function () { return $("#myInputFiled").val(); }
}

您可以在此处找到更多信息。在这种情况下,将在对操作的任何请求时读取当前值,并且该值将作为带有 name 的附加参数发送。myCustomParam

如果您需要从表单中获取所有控件的值,您可以使用$.serializeArray函数并将所有结果作为一个附加参数发送。

您可以使用和设置/更改新的附加属性来引用postData参数。getGridParam因为getGridParam如果您要求对象参数,则返回对其内部参数的引用,您将不需要使用setGridParam.

更新:我不知道您的代码在创建网格之前或之后执行的位置。你可以试试下面的代码

<script type="text/javascript">
    $(function () {
        var $grid = $("#<%= JQGrid1.ClientID %>");
        if ($grid.length > 0 && $grid[0].grid !== undefined) {
            var postData = $grid.jqGrid("getGridParam", "postData");
            postData.myParam = function () {
                return "test data";
            };
        } else {
            $.extend($.jgrid.defaults, {
                postData: {
                    myParam: function () {
                        return "test data";
                    }
                }
            });
        }
    });
</script>

我希望它在这两种情况下都有效。

于 2012-06-11T12:45:15.217 回答
0

是的,非常感谢 OLEG 的帮助,因为它让我得到了答案!

问题是帖子数据中已经指定了“SomeParam”,因此我不得不使用此表单扩展现有数据:

('#grid').jqGrid({                 
                serializeGridData: function(postData) { 
                  var newPostData = $.extend(postData, {
                      someParam: return $("#txtBox1").val(), 
                      paramTwo: return $("#txtBox1").val(),
                      paramThree: return $("#txtBox1").val(),
                  }); 

                  return $.param(newPostData); 
                } 
            }).trigger("reloadGrid");

这篇文章帮助我解决了这个问题,奥列格也在那边发帖。

于 2012-06-11T14:27:47.750 回答