【问题标题】:jqGrid Applying postdata filters in grid create ODD behaviorjqGrid 在网格中应用 postdata 过滤器创建 ODD 行为
【发布时间】: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 过滤器填充,但所有结果都是从查询返回的,而不是过滤的。很奇怪。研究更多。

标签: search filter jqgrid


【解决方案1】:

回答我自己的问题:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 2011-05-25
    • 2012-04-03
    • 2013-05-07
    • 1970-01-01
    • 2011-08-21
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多