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 controllerには、次のメソッドがあります。

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 は、ステートメントdataUrlを含む HTML フラグメントを返すことを期待しています<select>。したがって、サーバーの応答を文字列 withステートメントに変換する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 に答える