jqGrid在网格中应用postdata过滤器创建ODD行为

时间:2016-02-09 19:44:49

标签: search filter jqgrid

我看到两种不同的行为而不确定原因。部分问题是从其他问答实施的测试解决方案的结果。甲

汇总网格创建(我只包括与问题相关的属性)......

网格设置1

url: jqDataUrl,
datatype: "json",
mtype: "GET",

//loadonce: true

// Default sorting
sortname: typeof prefs.sortCol !== "undefined" ? prefs.sortCol : "LastName",
sortorder: typeof prefs.sortCol !== "undefined" ? prefs.sortOrd :  "asc",
sorttype: "text",
sortable: true,

postData: { filters: JSON.stringify({ "groupOp": "AND", "rules": [{ "field": "FirstName", "op": "cn", "data": "max" }]})},
search: true,

结果1 ,搜索:true

当上面的网格首次加载时,它会加载来自postdata过滤器的过滤结果。如果我去编辑结果行的url并返回,则网格中的记录不会更新,即使上面的页面/网格从头开始从服务器重新加载。

网格设置2

//same as above but
search: false

结果2 ,搜索:false

此时网格加载时,未应用过滤器。如果我去编辑行的url并返回,则记录会更新。

我已经阅读了很多关于设置loadonce的帖子:true,并且将数据类型从local更改为json,将json更改为local以进行刷新,但我想要的是网格始终从服务器加载,排序和过滤数据。

虽然我明白免费的jqGrid做得更好,但不幸的是,我无法替换当前的jqGrid.js文件。

我的问题是两部分:

1)我没有在wiki here上看到搜索作为一个选项,所以在哪里定义。

2)可以以及如何在加载时应用postdata过滤器并在编辑后在网格上更新我的记录?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

1)search:true将在http请求中发送_search == true。

2)在http请求中发送了postdata过滤器(也就是查询数据时的where子句),但是,我的控制器正在执行基于搜索的不同操作:从http请求解析的值(也就是_search)。

在我的控制器内部,我根据_search值设置了另一个属性,然后使用控制器的属性来确定是否刷新网格数据或使用会话。它正在使用会话,因此在编辑后没有更新我的过滤结果。

我发现的另一个问题是,如果我有搜索:true并手动将postdata过滤器重置为{},我的控制器在尝试使用null设置linq时出现错误(没有抛出没有尝试/捕获) ,退出网格设置并且不显示任何内容。