这是this线程的延续。我正在使用 free-jqGrid 4.9.0 并进行内联编辑。
{ name: 'ContactName', editable: true, width: 100, sortable: false, frozen: true, formatter: 'select', edittype: 'select',
editoptions: {
dataUrl: '/InvestorList/GetContactList',
postData: function (rowid, value, cmName) {
return { projectId: rowid };
}
}
在我的ASP .NET MVC 控制器中,我有以下方法:
public JsonResult GetContactList(string projectId)
{
var contacts = new Dictionary<string, string>();//context.GetContactList(projectId);
contacts.Add("123","IAM1");
contacts.Add("1234", "IAM2");
contacts.Add("12345", "IAM3");
return Json(contacts, JsonRequestBehavior.AllowGet);
}
使用IE开发人员工具,这是响应:
{"123":"IAM1","1234":"IAM2","12345":"IAM3"}
但是我收到以下错误,
http://localhost:51176/Scripts/jquery-2.1.3.min.js中第2行第12461行未处理的异常 0x800a139e - JavaScript运行时错误:语法错误,无法识别的表达式:{&#34; 123&#34;:&#34; IAM1&#34;,&#34; 1234&#34;:&#34; IAM2&#34;,& #34; 12345&#34;:&#34; IAM3&#34;}
我想知道dataUrl
期望的格式是什么,因为我对其他列使用完全相同的格式,例如editoptions: { value: TeaserStatusList }
在这种情况下,TeaserStatusList
的格式与{"123":"IAM1","1234":"IAM2","12345":"IAM3"}
由于
更新
{ name: 'ContactId', editable: true, width: 100, sortable: false, edittype: 'select', editoptions: { dataUrl: '/InvestorList/GetContactList',
postData: function (rowid, value, cmName) {
var accid = $(gridId).jqGrid("getCell", rowid, "AccountId");
return { accountId: accid };
},
buildSelect: function (data) {
var s = "<select>";
data = JSON.parse(data);
$.each(data, function (k, v) {
s += '<option value="' + k + '">' + v + '</option>';
});
return s + "</select>";
}
}
答案 0 :(得分:0)
jqGrid期望public class IntArrayComparer : IEqualityComparer<int[]>
{
public bool Equals(int[] x, int[] y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(int[] x)
{
return x.Aggregate((t,i) => t + i.GetHashCode());
}
}
class Program
{
static void Main(string[] args)
{
int[] t1 = new int[] { 0, 2 };
List<int[]> trash = new List<int[]>()
{
t1,
new int[] {0,2},
new int[] {1,0},
new int[] {1,1}
};
List<int[]> trash2 = new List<int[]>()
{
new int[] {0,1},
new int[] {1,0},
new int[] {1,1}
};
var difference = trash.Except(trash2, new IntArrayComparer()).ToArray();
}
}
返回带有dataUrl
语句的HTML片段。因此,您应该在<select>
中添加buildSelect
属性,该属性将服务器响应转换为带有editoptions
语句的字符串。相应的代码可能如下所示
<select>
我没有对代码进行测试,但在我看来它与buildSelect: function (data) {
var s = "<select>", i, l, val;
if (data != null) {
for (val in data) {
if (data.hasOwnProperty(val)) {
s += "<option value='" + val + "'>" + data[val] + "</option>";
}
}
}
return s + "</select>";
}
操作返回的数据格式相对应。
我建议您在操作GetContactList
的开头添加行HttpContext.Current.Response.Cache.SetMaxAge (new TimeSpan(0));
,以确保您在缓存方面没有任何问题,并且每次都会调用GetContactList
操作时间。