我在包装在ASP.NET web部件中的页面上有一个jqGrid。下面是它的定义:
$("#referent_grid").jqGrid({
url: '<%= SPContext.Current.Site.Url %>' + wsBaseUrl + 'ReferentService.asmx/ListReferents',
colNames: ['Full Name', 'Phone Number', 'Email', 'Department'],
colModel: [
{ name: 'FullName', index: 'FullName', width: 240, align: 'left', search: true, stype: 'text', searchoptions: { sopt: ['eq', 'bw', 'bn', 'ew', 'en', 'cn', 'nc']} },
{ name: 'PhoneNumber', index: 'PhoneNumber', width: 120, align: 'left', search: true, stype: 'text', searchoptions: { sopt: ['eq', 'bw', 'bn', 'ew', 'en', 'cn', 'nc']} },
{ name: 'Email', index: 'Email', width: 180, align: 'left', search: true, stype: 'text', searchoptions: { sopt: ['eq', 'bw', 'bn', 'ew', 'en', 'cn', 'nc']} },
{ name: 'Department', index: 'Department', width: 180, align: 'left', search: true, stype: 'text', searchoptions: { sopt: ['eq', 'bw', 'bn', 'ew', 'en', 'cn', 'nc']} },
],
jsonReader: {
id: "ReferentID"
},
pager: $('#referent_grid_pager'),
sortname: 'FullName',
sortorder: "asc",
height: '300',
shrinkToFit: false,
caption: 'Referent List'
});
$("#referent_grid").jqGrid('navGrid', '#referent_grid_pager',
{ add: true, addtitle: 'Add Referent', edit: true, edittitle: 'Edit Referent',
del: true, deltitle: 'Delete Referent', refresh: true, refreshtitle: 'Refresh data',
search: true, searchtitle: 'Advanced search filters',
addfunc: addReferent, editfunc: editReferent
},
{}, // default settings for edit
{}, // default settings for add
{ // define settings for Delete
mtype: "post", reloadAfterSubmit: true,
url: '<%= SPContext.Current.Site.Url %>' + wsBaseUrl + 'ReferentService.asmx/DeleteReferent',
resize: false,
serializeDelData: function (postdata) {
return JSON.stringify({ referentID: postdata.id });
},
afterSubmit: function (data, postdata) {
var result = $.parseJSON(data.responseText);
return [true, ''];
}
},
{ closeOnEscape: true, multipleSearch: true, closeAfterSearch: true }, // search options
{}
);如你所见,我启用了高级搜索。我面临的问题是,在第一次调用页面时,jqGrid会调用ListReferents方法,而不传递filters参数,正如您在下面的Fiddler截图中所看到的那样

当我单击jqGrid的refresh按钮时,它会调用ListReferents方法,并传递filters参数,如下面的Fiddler截图所示

为此,我在web服务中定义了两个方法,但第一个方法从未被调用,而第二个方法被调用过。
[WebMethod]
public JQGridData ListReferents(string _search, string nd, string rows, string page, string sidx, string sord) {
return ListReferents(_search, nd, rows, page, sidx, sord, string.Empty);
}
[WebMethod]
public JQGridData ListReferents(string _search, string nd, string rows, string page, string sidx, string sord, string filters) {
// method code here
}我哪里做错了?
发布于 2011-05-26 15:57:14
问题是应该定义 web服务的所有参数。在对服务器的请求中,只定义了5个标准参数:_search、rows、page、sidx、sord。因此,您必须在serializeGridData内部测试postData中是否定义了filter属性。如果未定义,则应将其设置为null或空字符串""
serializeGridData: function (postData) {
if (postData.filters === undefined) postData.filters = null;
return JSON.stringify(postData);
}(请参阅here A示例)。它应该能解决你的问题。
此外,您应该删除colModel定义中的翻译逗号(‘]’前的逗号)。
再提一个小建议。您可以简化colModel中的列定义。首先,您可以删除默认的align: 'left', search: true, stype: 'text'属性(请参阅the documentation)。此外,您在大多数列中都有一些公共设置,您可以根据cmTemplate参数重新定义网格的colModel的默认值:
colModel: [
{ name: 'FullName', index: 'FullName', width: 240 },
{ name: 'PhoneNumber', index: 'PhoneNumber', width: 120 },
{ name: 'Email', index: 'Email', width: 180 },
{ name: 'Department', index: 'Department', width: 180 }
],
cmTemplate: { searchoptions: { sopt: ['eq', 'bw', 'bn', 'ew', 'en', 'cn', 'nc']} }有关列模板here的更多信息,请参阅。
https://stackoverflow.com/questions/6131113
复制相似问题