0

这是线程的延续。我正在使用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 0x800a139e中的第 2 行第 12461 列未处理的异常 - JavaScript 运行时错误:语法错误,无法识别的表达式:{“123”:“IAM1”, 1234":"IAM2","12345":"IAM3"}

我想知道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>";
                        }
                    }
4

1 回答 1

0

jqGrid 期望返回带有语句的dataUrlHTML 片段。<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以确保您不会遇到缓存问题,并且GetContactList每次都会调用该操作。

于 2015-06-23T10:19:48.940 回答