2013-03-28 120 views
0

我現在面臨這個問題很長一段時間了,我無法綁定JSON數據,我的控制器操作傳遞給了Kendo UI Grid,但之前幾乎沒有JavaScript問題,現在他們都走了,但仍然是我網沒有顯示任何結果:Kendo UI Grid沒有顯示JSON數據

Model

public object GetResult(string id) 
    { 
     var sqlCom = new SqlCommand("SELECT [No],[Desc],[Date],[Height],[Final] FROM [cr_form] WHERE [uId][email protected];", sqlConn); 
     sqlCom.Parameters.AddWithValue("@id", id); 

     StringBuilder sb = new StringBuilder(); 
     StringWriter sw = new StringWriter(sb); 
     JsonWriter jsonWriter = new JsonTextWriter(sw); 
     var rcrds = GETSQLRESULTS(sqlCom); 

     try 
     { 
      int i = 0; 
      if (rcrds != null || rcrds.HasRows) 
      { 
       //jsonWriter.WriteStartObject(); 
       while (rcrds.Read()) 
       { 
        jsonWriter.WriteStartObject(); //Changed 
        for (int j = 0; j < rcrds.FieldCount; j++) 
        { 
         jsonWriter.WritePropertyName(rcrds.GetName(j)); // column name 
         jsonWriter.WriteValue(rcrds.GetValue(j)); // value in column 
        } 
        i++; 
        jsonWriter.WriteEndObject(); //Changed 
       } 
       //jsonWriter.WriteEndObject(); 

      } 

     } 

     catch (Exception ex) { } 
     return jsonWriter; 
    } 

Controller

public ActionResult GetRecords() 
    { 
     var usrObj = new User(); 
     var jsnRslt = usrObj.GetResult(Session["Id"].ToString()); 
    //Till here jsnRslt contains this string: 「{"No":null,"Desc":"asfasfasfasfasfasfasfasfasfasfasfasf","Date":"2013-03-27T00:00:00","Height":0,"Final":null,"No":null,"Desc":"etwetwetwetwet","Date":"2013-03-27T00:00:00","Height":0,"Final":0,"No":null,"Desc":"asfasfasfskfjklajsfkjasklfjklasjfklajsfkljaklsfjklasjfkljasfkljlasf","Date":"2013-03-27T00:00:00","Height":0,"Final":0,"No":null,"Desc":"askjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfklaskjfkajsfkl","Date":"2013-03-27T00:00:00","Height":0,"Final":0,"No":null,"Desc":"safasfasfasfasfasf","Date":"2013-03-27T00:00:00","Height":0,"Final":0,"No":null,"Desc":"asfasf","Date":"2013-03-27T00:00:00","Height":0,"Final":0,"No":null,"Desc":"asfasfasf","Date":"2013-03-27T00:00:00","Height":2,"Final":0}」 

    //After Changes in the Model I am getting it in the required Array format: 
    //{"No":null,"Desc":"asfasfasfasfasfasfasfasfasfasfasfasf","Date":"2013-03-27T00:00:00","Height":0,"Final":null} 
    //{"No":null,"Desc":"etwetwetwetwet","Date":"2013-03-27T00:00:00","Height":0,"Final":0} 
    //{"No":null,"Des... 

     return Json(jsnRslt, JsonRequestBehavior.AllowGet);    
    } 

View

<div> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#grid").kendoGrid({ 
       dataSource: { 
        type: "json", 
        serverPaging: true, 
        pageSize: 5, 
        groupable: true, 
        selectable: "row", 
        transport: { read: { url: "Records", dataType: "json"} } 
       }, 
       height: 400, 
       scrollable: true, 
       sortable: true, 
       filterable: true, 
       pageable: true, 
       columns: [ 
         { field: "No", title: " No" }, 
         { field: "Desc", title: "Description" }, 
         { field: "Date", title: "Date" }, 
         { field: "Height", title: "Height" }, 
         { field: "Final", title: "Final" } 
        ], 
       dataBound: function() { 
        this.expandRow(this.tbody.find("tr.k-master-row").first()); 
       } 
      }); 
     }); 
    </script> 
</div> 

但畢竟這一切我可以看到的是一個空的網格。在JavaScript控制檯中沒有錯誤。

請幫忙

回答

2

從服務器返回的JSON應該是數組。您目前看來您正在返回具有相同多個字段的單個對象。

下面是一個例子的JSON看起來應該像:

[{"No":null,"Desc":"asfasfasfasfasfasfasfasfasfasfasfasf","Date":"2013-03-27T00:00:00","Height":0,"Final":null}, 
{"No":null,"Desc":"etwetwetwetwet","Date":"2013-03-27T00:00:00","Height":0,"Final":0}, 
{"No":null,"Desc":"asfasfasfskfjklajsfkjasklfjklasjfklajsfkljaklsfjklasjfkljasfkljlasf","Date":"2013-03-27T00:00:00","Height":0,"Final":0}] 
+0

三江源..但我怎樣才能達到這個結果比?我以爲'Json(jsnRslt,JsonRequestBehavior.AllowGet);'會照顧這個.. – Maven 2013-03-29 05:02:05

+0

我已經在我的代碼中做了一些改變,可能現在JSON是所需的格式,但仍然沒有在網格中得到任何結果。 – Maven 2013-03-29 05:39:05

0

我想下面的代碼將是對您有用,讓我知道,如果你有任何問題:

$('#gridName').kendoGrid({ 
     dataSource: { 
      type: "odata", 
      transport: { 
       read: { 
        contentType: "application/json; charset=utf-8", 
        type: "POST", 
        url: 'YourURL' 
       } 
      }, 
      pageSize: 10, 
      type: "json" 
     }, 
     scrollable: true, 
     sortable: true, 
     resizable: true 

}) ;

+0

完成但沒有影響 – Maven 2013-04-01 08:49:42

+0

嘿,改變你的GetRecords方法的返回類型爲JsonResult和YourURL將像'/ Controller/GetRecords' – ravisolanki07 2013-04-01 15:13:55

+0

與你的新代碼我不能得到網格..它什麼也沒有顯示。無論如何,當使用'JS'代碼時,我至少可以看到grif – Maven 2013-04-02 05:26:42

0

裏面你dataSource設置的數據。

data: @Html.Raw(Json.Encode(Model.RemoteObject)), 

RemoteObject是包含所有數據的對象。

0

首先我檢查你的tranport閱讀網址。如果它觸發GetRecords命令,你有跟蹤控制器嗎?

transport: 
{ 
    read: { 
    //if you don't use area then remove it 
    url: "@Url.Action("GetRecords", new { area = "YourAreaName", controller = "YourControllerName" })", 
    dataType: "json" 
    } 
} 

如果仍然不能解決你的問題,然後修改您的控制器,

public ActionResult GetRecords([DataSourceRequest] DataSourceRequest request) 
{ 
    var usrObj = new User(); 
    var jsnRslt = usrObj.GetResult(Session["Id"].ToString()); 
    return Json(jsnRslt.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);    
} 

here's the link to understand the Kendo's ToDataSourceResult