2013-03-28 123 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