jqGrid не отображает данные JSON - PullRequest
1 голос
/ 22 июня 2011

Я использую asp.net mvc для создания веб-страницы, которая отображает jqGrid для данных в моей таблице azure.Сетка будет вызывать мой контроллер и, используя отладчик, я могу визуально убедиться, что данные генерируются правильно.Проблема заключается в том, что как только данные возвращаются в виде строки JSON, jqGrid выдает эту ошибку:

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

Я искал документацию в Интернете, но не смог вернуть ничего, кроме того, что выглядит как снимки репозитория,Я сократил свой код, чтобы только один столбец данных (показанный ниже) возвращался в виде строки, но все еще ничего.

Если я добавлю строку "datatype: 'local'" в мои параметры jqGrid, ошибка не будет выдана.Тем не менее, данные по-прежнему не отображаются.Ни один из других вопросов, предложенных в «Похожие вопросы», не решил мою проблему.Данные - это просто поле Id и простая строка C #.

Ниже приведено содержимое файла aspx, используемого для визуализации jqGrid:

<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", представлена ​​ниже (изначально у меня не было опции «datatype» в файле aspx, показанном выше для jqGrid):

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 ]

2 голосов
/ 03 сентября 2011

Попробуйте:

 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 голосов
/ 03 августа 2011

Попробуйте изменить тип m jqgrid на «GET» и тип данных «json»:

datatype: 'json'
mtype: 'GET'

и измените возврат действия вашего контроллера GridData на:

return Json(data, JsonRequestBehavior.AllowGet);
...