jqGrid不显示JSON数据

时间:2011-06-21 21:40:00

标签: asp.net-mvc-2 jqgrid-asp.net

我正在使用asp.net mvc创建一个网页,在我的azure表中为数据呈现jqGrid。网格将回调到我的控制器并使用调试器,我可以直观地验证数据是否正确生成。问题是,一旦数据作为JSON字符串返回,jqGrid就会抛出此错误:

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>

用于组成包含在C#文件“HouseDataController.cs”中的json字符串的函数如下(最初我在上面显示的jqGrid的aspx文件中没有“datatype”选项):

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);
    }

使用Firebug捕获错误消息。如果这不是特定/详细的,或者如果它在另一个线程中解决,请建议。

谢谢!

2 个答案:

答案 0 :(得分: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部分。我有同样的问题,这似乎解决了它。

答案 1 :(得分:0)

尝试将jqgrid的mtype更改为'GET',将数据类型更改为'json':

datatype: 'json'
mtype: 'GET'

并将GridData控制器操作的返回更改为:

return Json(data, JsonRequestBehavior.AllowGet);