我的colModel对象是一个json序列化对象,代表以下MovingRecord
类
public class CompanyData {
public string Code { get; set; }
public string Segment { get; set; }
public string CompetenceArea { get; set; }
}
public class MovingRecord {
public int MovingRecordID { get; set; }
public CompanyData FromCompanyData { get; set; }
public CompanyData ToCompanyData { get; set; }
public float FTE { get; set; }
}
在jqGrid配置中,我有以下colModel:
colModel: [
{ name: 'FromCompanyData.Code', index: 'FromCompanyData.Code', width: 70, sortable: false, align: 'left', search: true, template: colTextTemplate },
{ name: 'FromCompanyData.Segment', index: 'FromCompanyData.Segment', width: 170, sortable: false, align: 'left', search: true, template: colTextTemplate },
{ name: 'FromCompanyData.CompetenceArea', index: 'FromCompanyData.CompetenceArea', width: 170, sortable: false, align: 'left', search: true, template: colTextTemplate },
{ name: 'ToCompanyData.Code', index: 'ToCompanyData.Code', width: 70, sortable: false, align: 'left', search: true, template: colTextTemplate },
{ name: 'ToCompanyData.Segment', index: 'ToCompanyData.Segment', width: 170, sortable: false, align: 'left', search: true, template: colTextTemplate },
{ name: 'ToCompanyData.CompetenceArea', index: 'ToCompanyData.CompetenceArea', width: 170, sortable: false, align: 'left', search: true, template: colTextTemplate },
{ name: 'FTE', index: 'FTE', width: 60, sortable: false, align: 'right', search: true, formatter: 'number', template: colFloatTemplate }
],
这完全符合预期。不幸的是问题是当我尝试搜索那些字段时。由于记录本身的性质,成员FromCompanyData/ToCompanyData
可以是可以为空的对象。
使用以下代码激活搜索:
grid.jqGrid('navButtonAdd', '#' + pagerID, {
caption: "", buttonicon: "ui-icon-search", position: "last", title: "Advanced search filters",
onClickButton: function () {
grid.jqGrid('searchGrid',
{ sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge', 'bw', 'cn'], closeOnEscape: true, multipleSearch: true, closeAfterSearch: true, recreateFilter: true });
}
});
当我尝试搜索时,我总是收到以下错误"{Field Name} : the field is required".
有关如何解决此问题的任何帮助? 感谢
修改
根据Oleg评论,这是colTextTemplate
var colTextTemplate = {
sorttype: 'text',
align: 'left',
search: true,
stype: 'text',
searchoptions: { sopt: ['eq', 'ne', 'bw', 'cn'] },
searchrules: { required: true }
};
我尝试删除required: true
选项并遇到了不同的行为。如果我删除此选项,原始错误消失,但构建的过滤器不包括数据字段,即使我用一些文本填充它。
例如,过滤器类似于以下
{
"_search":true,
"nd":1391184286612,
"rows":9999,
"page":1,
"sidx":"MovingRecordID",
"sord":"asc",
"filters":"{\"groupOp\":\"AND\",\"rules\":[{\"field\":\"FromCompanyData.Code\",\"op\":\"eq\",\"data\":\"\"}]}","searchField":"","searchString":"","searchOper":""}
答案 0 :(得分:1)
最后一次更新对我来说仍然不太清楚。我认为您应该从required: true
移除searchrules
属性(或设置为required: false
)。空数据的问题在我看来是另一个问题。这是jqGrid当前实现中的一个错误。我发布了here我的建议以解决问题。 Here是所需更改中最重要的部分。主要思想是:在使用搜索对话框中的数据之前触发change
事件(请参阅the line)。应另外删除setTimeout
(请参阅here)以使用搜索对话框中的当前数据。大约两个月前,The referenced pull request被合并到github上的jqGrid的主代码中,但最后发布的版本4.5.4仍包含该错误。我建议您在jquery.jqGrid.src.js
的副本中进行描述修改。我希望它能解决你的问题。