我刚刚从jqgrid 3.6.5迁移到网格版本4.4.4。问题是我的选择列表没有填充dataUrl选项和edittype select。请看下图
从图中可以看出,网格已向GetManager和GetTerritory发送了两个ajax请求,但结果数据未显示在选择列表中。我添加了语言文件jqgrid.min.js和grid.formedit.js。以下是其中一个列模型的代码
{ name: 'ManagerId',
//sortable: true,
index: 'ManagerId',
//width: 50,
hidden:true,
align: 'center',
formatter: 'mail',
editable: true,
edittype: 'select',
editoptions: {aysnc:false, dataUrl: '@Url.Action("GetManagers", "Employee")',
buildSelect: function (data) {
var response = jQuery.parseJSON(data.responseText);
var s = '<select>';
s += '<option value="0">--No Manager--</option>';
$($.parseJSON(data.responseText)).map(function () {
s += '<option value="' + this.EmployeeId + '">' + this.EmployeeName + '</option>';
});
return s + "</select>";
}
},
editrules: { required: true,edithidden:true },
formoptions: { elmsuffix: ' *',label:'Manager' }
},
任何人都可以建议它有什么问题。
编辑1
服务器响应
[{"EmployeeId":2,"EmployeeName":"Jack"},{"EmployeeId":4,"EmployeeName":"xe"},{"EmployeeId":1001,"EmployeeName":"John"},{"EmployeeId":2000,"EmployeeName":"Jack"},{"EmployeeId":2001,"EmployeeName":"Jill"}]
响应标头
Cache-Control private
Connection Close
Content-Length 203
Content-Type application/json; charset=utf-8
Date Thu, 14 Feb 2013 13:20:09 GMT
Server ASP.NET Development Server/10.0.0.0
X-AspNet-Version 4.0.30319
X-AspNetMvc-Version 3.0
由于
答案 0 :(得分:2)
首先,我建议您检查data
回调中buildSelect
参数的类型。依赖于其他一些因素,data
可能已经从JSON响应解析了对象。您可以在alert(typeof data.responseText);
的开头添加buildSelect
。或者,您可以使用jQuery.isArray验证data
参数是否已经是数据数组,或者需要使用jQuery.parseJSON
将输入数据转换为数组。
下一个问题是您使用jQuery.map而不是jQuery.each。所以代码可能是关于以下的
buildSelect: function (response) {
var data = typeof response === "string" ?
$.parseJSON(response.responseText) : response,
s = "<select>";
s += '<option value="0">--No Manager--</option>';
$.each(data, function () {
s += '<option value="' + this.EmployeeId + '">' + this.EmployeeName +
'</option>';
}
return s + "</select>";
}
您应该另外修复aysnc:false
的属性editoptions
。这些选项是未知的,只会被忽略。