2011-06-21 67 views
1

我正在使用asp.net mvc来创建一个网页,呈现我天蓝色表中的数据的jqGrid。网格会回调到我的控制器并使用调试器,我可以直观地验证数据是否正确生成。问题是,一旦数据返回一个JSON字符串时,jqGrid的引发此错误:jqGrid不显示JSON数据

b.jgrid.getAccessor(p, d.cell) is undefined 
http://localhost:54758/jquery.jqGrid.min.js 
Line 65 

我在网上找了文档,但已经在返回除了这似乎是库快照什么是不成功的。我已经剥离了我的代码,只有一列数据(如下所示)作为字符串返回,但仍然没有。

如果我将“datatype:'local',”行添加到我的jqGrid选项中,则不会引发错误。但是,数据仍然没有呈现。 “类似问题”中提出的其他问题都没有解决我的问题。数据只是一个Id字段,是一个简单的C#字符串。

下面是用于呈现的jqGrid ASPX文件内容:

<asp:Content ID="Content2" ContentPlaceHolderID="HeadContent" runat="server"> 
<%--Must load language tag BEFORE script tag--%> 
<script src="grid.locale-en.js" type="text/javascript"></script> 
<script src="jquery.jqGrid.min.js" type="text/javascript"></script> 

<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     jQuery("#list").jqGrid({ 
      autowidth: true, 
      url: '/HouseData/GridData/', 
      datatype: 'local', <---instead of 'local' I also tried 'jsonstring' 
      mtype: 'POST', 
      colNames: ['House Name'], 
      colModel: [ 
       { name: 'houseName', index: 'houseName', key: true, width: 80, align: 'right', hidden: false }], 

      pager: jQuery('#pager'), 
      rowNum: 20, 
      rowList: [5, 10, 20, 50], 
      sortname: 'houseName', 
      sortorder: "desc", 
      height: 400, 
      viewrecords: true, 
      imgpath: '' 
     }); 
    }); 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
<div id="main"> 
    <h2><a href="#">Show House Name</a></h2> 
    <div class="disignBoxFirst"> 
     <div class="boxContent"> 
       <%: Html.Partial("HouseDataSearch") %> 
     </div> 
    </div> 
    <hr /> 
    <table id="list" class="scroll" cellpadding="0" cellspacing="0"></table> 
    <div id="pager" class="scroll" style="text-align:center;"></div> 
</div> 
</asp:Content> 

用来组成JSON字符串,包含在C#文件“HouseDataController.cs”功能,低于(最初我没有”吨具有用于上述的jqGrid中所示的“数据类型”中的aspx文件选择):使用萤火虫被抓住

public JsonResult GridData(string sidx, string sord, int page, int rows, string houseName) 
    {    
     //Setup values to return to the view for display of user entered values    
     ViewData["HouseName"] = houseName; 


     //Get table data 
     CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("ConnectionString"); 
     ReportStorageDataServiceContext storageContext = new ReportStorageDataServiceContext(storageAccount.TableEndpoint.ToString(), storageAccount.Credentials); 

     int houseCount = 0; 
     IQueryable<HouseDataModel> houses = storageContext.CreateQuery<HouseDataModel>("HouseDataTable").Where(h => h.isAvailable == true); 
     List<HouseDataModel> queryDetails = new List<HouseDataModel>(); 
     foreach (HouseDataModel house in houses) 
     { 
      queryDetails.Add(house); 
      houseCount++; 
     } 

     //Figure out paging 
     int pageIndex = Convert.ToInt32(page) - 1; 
     int pageSize = rows; 
     int totalRecords = houseCount; 
     int totalPages = (int)Math.Ceiling((float)totalRecords/(float)pageSize); 

     var jsonData = new 
     { 
      total = totalPages, 
      page, 
      records = totalRecords, 
      rows = (from house in queryDetails select new { User = house.houseName }).ToArray() 
     }; 

     return Json(jsonData); 
    } 

错误消息。如果这不够具体/足够详细,或者如果它在另一个线程中解决,请告知。

谢谢!

回答

2

试试这个:

jQuery("#list").jqGrid({ 
      autowidth: true, 
      url: '/HouseData/GridData/', 
      datatype: 'local', <---instead of 'local' I also tried 'jsonstring' 
      mtype: 'POST', 
      colNames: ['House Name'], 
      colModel: [ 
       { name: 'houseName', index: 'houseName', key: true, width: 80, align: 'right', hidden: false }], 

      pager: jQuery('#pager'), 
      rowNum: 20, 
      rowList: [5, 10, 20, 50], 
      sortname: 'houseName', 
      sortorder: "desc", 
      height: 400, 
      viewrecords: true, 
      imgpath: '', 
      jsonReader : { 
       root: "rows", 
       page: "page", 
       total: "total", 
       records: "records", 
       repeatitems: false, 
       cell: "cell", 
       id: "id", 
       userdata: "userdata",  
       },   
     }); 

我添加了jsonReader部分。我有同样的问题,这似乎解决它。

+0

海@Matthew Rygiel谢谢。刚才我也遇到了同样的问题。 JsonReader为我工作。谢谢。 – vissu

0

尝试改变的jqGrid的MTYPE到 'GET' 和数据类型为 'JSON':

datatype: 'json' 
mtype: 'GET' 

,改变你的GridData控制器动作的回归:

return Json(data, JsonRequestBehavior.AllowGet);