jqGrid 在网格中应用 postdata 过滤器创建奇怪的行为
jqGrid Applying postdata filters in grid create ODD behavior
我看到两种不同的行为,但不确定原因。问题的部分内容是从其他问答中实施的测试解决方案的结果。
汇总网格创建(我只包括与问题相关的属性)...
网格设置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 与搜索:真
当上面的网格首次加载时,它会加载来自 postdata 过滤器的过滤结果。如果我去编辑结果行的 url 并返回,网格中的记录不会更新,即使上面的 page/grid 是从服务器从头开始重新加载。
网格设置 2
//same as above but
search: false
结果 2 与搜索:false
这次加载网格时,未应用过滤器。如果我去编辑 url 行然后回来,记录就会更新。
我已经阅读了很多关于设置 loadonce: true 以及将数据类型从本地更改为 json 并将 json 更改为本地以进行刷新的帖子,但我想要的是让网格始终从服务器数据加载、排序和过滤。
虽然我知道免费的 jqGrid 做得更好,但不幸的是,我无法替换当前的 jqGrid.js 文件。
我的问题分为两部分:
1) 我在 wiki 上没有看到搜索选项 here 所以它在哪里定义的。
2) 我能否以及如何让 postdata 过滤器在加载时应用并且我的记录在编辑后在网格上更新?
回答我自己的问题:
1) search:true 将在 http 请求中发送 _search==true。
2) 在 http 请求中发送了 postdata 过滤器(也就是查询数据时的 where 子句),但是,我的控制器正在根据搜索执行不同的操作:从 http 请求解析的值(aka _search)。
在我的控制器中,我根据 _search 值设置了另一个 属性,然后使用控制器的 属性 来确定是否刷新网格数据或使用会话。它正在使用会话,因此在编辑后没有更新我的过滤结果。
我发现的另一个问题是,如果我有 search:true 并手动将 postdata 过滤器重置为 {},我的控制器会出现错误(未抛出 w/o try/catch)尝试用 null 设置 linq,然后退出网格设置并且不显示任何内容。
我看到两种不同的行为,但不确定原因。问题的部分内容是从其他问答中实施的测试解决方案的结果。
汇总网格创建(我只包括与问题相关的属性)...
网格设置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 与搜索:真
当上面的网格首次加载时,它会加载来自 postdata 过滤器的过滤结果。如果我去编辑结果行的 url 并返回,网格中的记录不会更新,即使上面的 page/grid 是从服务器从头开始重新加载。
网格设置 2
//same as above but
search: false
结果 2 与搜索:false
这次加载网格时,未应用过滤器。如果我去编辑 url 行然后回来,记录就会更新。
我已经阅读了很多关于设置 loadonce: true 以及将数据类型从本地更改为 json 并将 json 更改为本地以进行刷新的帖子,但我想要的是让网格始终从服务器数据加载、排序和过滤。
虽然我知道免费的 jqGrid 做得更好,但不幸的是,我无法替换当前的 jqGrid.js 文件。
我的问题分为两部分:
1) 我在 wiki 上没有看到搜索选项 here 所以它在哪里定义的。
2) 我能否以及如何让 postdata 过滤器在加载时应用并且我的记录在编辑后在网格上更新?
回答我自己的问题:
1) search:true 将在 http 请求中发送 _search==true。
2) 在 http 请求中发送了 postdata 过滤器(也就是查询数据时的 where 子句),但是,我的控制器正在根据搜索执行不同的操作:从 http 请求解析的值(aka _search)。
在我的控制器中,我根据 _search 值设置了另一个 属性,然后使用控制器的 属性 来确定是否刷新网格数据或使用会话。它正在使用会话,因此在编辑后没有更新我的过滤结果。
我发现的另一个问题是,如果我有 search:true 并手动将 postdata 过滤器重置为 {},我的控制器会出现错误(未抛出 w/o try/catch)尝试用 null 设置 linq,然后退出网格设置并且不显示任何内容。