我正在使用JQSuite的Trirand.Web.MVC dll将JQGrid集成到我的MVC 3应用程序中。
我正在使用JQGrid的HTML帮助器,所以在我的View中我有以下内容:
@Html.Trirand().JQGrid(Model.MyGrid, "Grid")
我知道我可以通过使用以下代码点击按钮来重新加载网格:
$("#Grid").trigger("reloadGrid");
这将重新加载网格,调用我在控制器代码中指定的Action方法来设置JQGrid。
我在页面上有其他用于搜索/过滤的控件,这些控件可以很好地传递给action方法。
我找到了setGridParam方法,它似乎表明你可以做类似的事情:
$("#Grid").setGridParam({ someParam: 'blah' }).trigger("reloadGrid");
或者这个:
$("#Grid").jqGrid('setGridParam', { postData: { someParam: 'somevalue'} }).trigger("reloadGrid");
但我的action方法中的someParam参数没有填充任何方法
如何在JQGrid上设置它们,以便在重新加载时通过Action方法拾取它们?
更新: 我现在已经尝试了这个方法用于另一个参数,它可以工作!
所以现在我有:
$("#Grid").jqGrid('setGridParam', { postData: {
someParam: 'somevalue',
paramTwo: ' some value',
paramThree: 'some other value'
} }).trigger("reloadGrid");
someParam不起作用,但paramTwo和ParamThree可以正常工作。
奇怪!
什么可以阻止一个参数工作?
UPDATE2: 使用Oleg的建议如下:
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在重新加载之前返回正确的值。
答案 0 :(得分:2)
如果我理解您的正确,您可以使用postData
参数将其他参数发送到服务器。最简单的方法是使用postData
方法(属性作为函数):
postData: {
myCustomParam: function () { return $("#myInputFiled").val(); }
}
您可以找到更多信息here。在的情况下,将在任何请求处读取当前值,该值将作为附加参数发送,名称为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>
我希望它能在两种情况下都有效。
答案 1 :(得分: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");
这post帮我解决了这个问题,Oleg也在那里发帖。