如何使用jqGrid和文本框进行搜索?

时间:2011-09-12 17:14:06

标签: c# jquery asp.net-mvc asp.net-mvc-3 jqgrid

我的数据正在我的页面上正确加载。但是我有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以来,它已经变得更像客户端程序员;)

1 个答案:

答案 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的查询以及如何显示字段(我使用表达式语言来映射)从实体字段到字符串)。