2014-12-03 66 views
0

我有一個jqGrid工作正常使用local數據類型,但我現在想通過json加載值,但無法改變它。jqGrid - 從JSON加載值

這是我jqGrid代碼

jQuery("#grid").jqGrid({ 
     datatype: "json", 
     url: "/controller/getItems?id=2", 
     width: 1405, 
     colNames: ['id', 'surname'], 
     colModel: [ 
      { name: 'id', index: 'id', editable: false, hidden: false, hidedlg: true }, 
      { name: 'surname', index: 'surname', editable: true } 
     ], 
     onSelectRow: function (id, status, e) { 

     ... 
    }, 
    editurl: url, 

    ... 

因此獲得JSON是成功地發射的方法。

[HttpGet] 
    public ActionResult getItems(string id) 
    { 

     List<model> items = method.getItems(id); 
     string jsonText = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(items); 
     return Json(jsonText, JsonRequestBehavior.AllowGet); 

    } 

JSON的列名不匹配colModeljson

實例返回 - 什麼上面的對象jsonText包含

[{"id":434,"surname":"Woods"}, 
{"id":435,"surname":"Adams"}] 

有什麼我也做錯了還是錯過了?

感謝

+0

JS第三行是否存在拼寫錯誤?您錯過了引用網址的引號。 – 2014-12-03 16:37:40

+0

謝謝你的提問,這只是一個錯字。將會改變 – user3428422 2014-12-03 16:38:47

+0

您可以將回復與回覆標題一起發佈嗎? – 2014-12-03 17:58:52

回答

1

我想的是,在使用的System.Web.Script.Serialization.JavaScriptSerializer().Serialize錯誤。你只需要返回Json(items, JsonRequestBehavior.AllowGet);。此外,您可以從colModel刪除列idid值仍將被讀取並分配爲行的id屬性的值(id<tr>網格元素),稱爲rowid。您應該在網格中添加loadonce: true選項,因爲您沒有在服務器端實施數據分頁,並且添加gridview: true(如果您尚未使用它)以獲得更好的性能,並且將輸入數據解釋爲文本而不是HTML片段。

修訂:在使用舊版本的jqGrid一個的情況下,必須包括jsonReader參數,其對應的輸入數據的格式:

jsonReader: { 
    repeatitems: false, 
    root: function (obj) { return obj; } 
} 

一個還是應該使用另外loadonce: true選項。

+0

嗨@oleg,感謝您的信息。但是,按照您所做的更改,我仍然沒有將數據加載到網格中。我沒有使用'jsonReader'這可能是一個問題嗎? – user3428422 2014-12-03 18:54:37

+0

@ user3428422:您使用的是哪個版本的jqGrid?如果你使用當前版本,那麼你不需要任何'jsonReader'。我建議您使用Internet Explorer的開發人員工具(按F12啓動)或Chrome或Firefox來檢查HTTP流量。您將看到將發送到服務器的內容以及返回到Web瀏覽器的內容。之後,將清楚哪裏存在問題。 – Oleg 2014-12-03 19:24:45

+0

嗨@oleg - 版本是jqGrid 4.4.4 - 2008。當我使用螢火蟲響應'json'是我上面發佈的,也沒有語法或服務器錯誤 – user3428422 2014-12-03 20:39:29