我正在使用jqgrid以及工具栏过滤器(搜索)。在服务器端,我有一个.asmx Web服务,在将jqgrid绑定到它之后调用它。
第一次加载jqgrid时,发送到Web方法的参数是: _search:true nd:1384937982166 第1页 行:10 sidx:"" sord:" desc"
当我在每个列上方的过滤器文本框中输入一些文本时(例如“所有者”列),发送到Web方法的参数如下所示: 拥有者:"样品" _search:true nd:1384937982166 第1页 行:10 sidx:"" sord:" desc"
到目前为止一切顺利。但是当我清除文本框以加载所有数据而没有任何过滤参数"所有者"没有发送到服务器,我收到以下错误: "无效的网络服务电话,缺少参数值:\ u0027Owner \ u0027。"
那么我应该在服务器端使用什么签名来处理所有网格列的过滤? 谢谢
答案 0 :(得分:0)
问题如下:ASMX Web服务要求在每次向服务器发出的请求中始终发送方法的所有参数。只有在设置了过滤器的情况下,jqGrid(在使用toolbar filter或searching的情况下)才会发送过滤器信息(如所有者:“样本”)。
要解决此问题,您可以使用Owner
回调内的serializeGridData
(或其他)扩展参数,这些参数将发送到服务器。例如
serializeGridData: function (postData) {
if (postData.Owner=== undefined) postData.Owner = null;
return JSON.stringify(postData);
}
或
serializeGridData: function (postData) {
return JSON.stringify($.extend(true, {Owner: null}, postData));
}
还有一句话。如果网格中有许多列,则必须在ASMX Web方法中包含许多参数(每列一个附加参数)。在我看来并不好。您应该考虑使用filterToolbar的stringResult: true
选项。随后更改格式如何将参数发送到服务器。如果使用stringResult: true
选项,jqGrid会向服务器发送带有固定名称filters
的一个参数。参数的值是here描述的JSON字符串。在这种情况下,您可以将filters
从JSON反序列化为服务器上的对象。
一个更重要的评论。我建议您考虑使用网格的loadonce: true
选项。如果数据集中的总行数不是很多,则选项的使用非常实用。在服务器不需要实现服务器端分页,排序和过滤数据的情况下。而不是web方法应该一次返回所有数据,而jqGrid将为您实现分页,排序和过滤。