我的数据正在我的页面上正确加载。但是我有2个文本框和一个提交按钮,我希望根据该按钮过滤服务器中的记录。
注意:我没有使用默认情况下jqgrid提供的现有过滤器功能。
我有点困惑,我怎么能实现这一目标。是否有jqgrid的内置功能来实现这一目标?我目前处理这个问题的方法是在javascript中处理click事件并将post数据提供给action方法:
$('#submit').click(function () {
$("#customers").jqGrid('setGridParam', { postData: { 'ContactName': $('#contactName').val(),
CompanyName: $('#companyName').val()
}
});
$("#customers").trigger("reloadGrid");
});
然后在动作方法上捕获此帖子数据,它工作正常。有没有更好的方法呢?还是我在正确的轨道上?有时我觉得自己在服务器上编写的代码更少,而且自从我开始使用Asp.Net MVC 3.0以来,它已经变得更像客户端程序员;)
答案 0 :(得分:3)
您不必使用 setGridParam 来更改 postData ,因为您可以声明一个函数:
jqGrid({
url : ...,
datatype : ...,
mtype : "POST",
postData : {
"ContactName" : (function() {
return $("#contactName").val();
})
}
}
所以你的提交函数只会调用reloadGrid
$('#submit').click(function () {
$("#customers").trigger("reloadGrid");
}
如果你想减少代码量,你最好在JS中创建一个简单的API来选择Customer,Person,Contact等实体。目前我有一个由几十个这样的实体组成的应用程序 - 所以我必须创建一个JS API进行选择(它还具有通用的外观和感觉)。客户端从客户端指定要获取的列表名称,而可能名称列表在服务器的配置文件中定义,该文件还定义了对ORM的查询以及如何显示字段(我使用表达式语言来映射)从实体字段到字符串)。