Asp.net mvc 2 jqGrid不显示JSON数据

Asp.net mvc 2 jqGrid不显示JSON数据,asp.net-mvc-2,jqgrid-asp.net,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 我在网上查找文档,但除了看起来像是存储库快照的内容外,没有返回任何内容。我已

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

b.jgrid.getAccessor(p, d.cell) is undefined
http://localhost:54758/jquery.jqGrid.min.js
Line 65
我在网上查找文档,但除了看起来像是存储库快照的内容外,没有返回任何内容。我已经精简了代码,只将下面显示的一列数据作为字符串返回,但仍然没有返回任何内容

如果将行数据类型“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>
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);
    }
用于构成json字符串的函数(包含在C文件HouseDataController.cs中)如下所示。最初,我在上面显示的用于jqGrid的aspx文件中没有datatype选项:

<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>
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捕获的。如果这不够具体/详细,或者是在另一个线程中解决的,请告知


谢谢

尝试将jqgrid的mtype更改为“GET”,将datatype更改为“json”:

datatype: 'json'
mtype: 'GET'
并将GridData控制器操作的返回更改为:

return Json(data, JsonRequestBehavior.AllowGet);
试试这个:

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

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