【发布时间】:2016-05-19 22:58:42
【问题描述】:
我看到两种不同的行为,但不知道为什么。部分问题是从其他问答中实施的测试解决方案的结果。
汇总网格创建(我只包括与问题相关的属性)...
网格设置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 以及将数据类型从本地更改为 json 和 json 更改为本地以进行刷新的帖子,但我想要的是让网格始终从服务器数据中加载、排序和过滤。
虽然我知道免费的 jqGrid 做得更好,但不幸的是,我无法替换当前的 jqGrid.js 文件。
我的问题分为两部分:
1) 我不认为搜索是 wiki here 上的一个选项,所以它在哪里定义。
2) 我能否以及如何让 postdata 过滤器在加载时应用并且我的记录在编辑后在网格上更新?
【问题讨论】:
-
那么你在第一个场景中是否使用
loadonce: true?您要本地还是在服务器上应用过滤?您使用哪个editurl"clientArray"或服务器的某个URL?您使用哪种编辑模式?您写了“我无法替换当前的 jqGrid.js 文件”,但您没有写您使用哪个版本和哪个 fork。请务必了解,您不能随时将datatype从 json 更改为本地。重要的是你应该在那个时候填写data参数。只有当data参数被填充时,您才能像使用本地网格一样使用网格。 -
不使用 loadonce: true。只需将未注释的放在上面,这样就可以看出它没有被使用。行编辑被发送到连接到服务器的另一个页面并在该页面上保存/取消重新加载原始网格页面,所以我假设当网格重新加载时它应该获取网格的最新数据,但没有。我想一个问题是为什么 search:true 应用 postdata 过滤器但不允许网格页面加载新的更新值,而是显示旧值,直到我点击刷新数据按钮?为什么 search: false 不允许应用 postdata 过滤器?
-
@Oleg 我在上面找到了结果 1 问题。使用 search: true 当我从编辑页面返回时,mvc 控制器正在从会话中获取数据,而不是在数据库中查询新数据。使用会话或数据库的条件基于某些绑定变量。不确定它是什么,但将其注释掉并按预期工作。没有弄清楚 search:false 问题(上面的结果 2)。在控制器中,网格的 where 子句使用 postdata 过滤器填充,但所有结果都是从查询返回的,而不是过滤的。很奇怪。研究更多。