0

我在一个带有 WebApi (REST) 的 ASPNET MVC4 项目中使用 jqgrid,使用工作单元和存储库模式的实体框架 5。我的问题是我看到数据以 json 格式流向浏览器,我在网格中看到三行,但这些行是空的,并且数据没有显示(网格中的三个空行)。

这是在 WebApi 控制器中获取数据的方法:

public dynamic GetGridData(int rows, int page, string sidx, string sord)
{
    var pageSize = rows;
    var index = sidx;
    var order = sord;
    var categories = Uow.Categories.GetAll().OrderBy(t => (string.IsNullOrEmpty(index) ? "Id" : index) + " " + (order ?? "desc"));
    var pageIndex = Convert.ToInt32(page) - 1;
    var totalRecords = categories.Count();
    var totalPages = (int)Math.Ceiling((float) totalRecords / (float) pageSize);
    var categoriesPage = categories.Skip(pageIndex * pageSize).Take(pageSize).ToList();

    return new 
        {
            total = totalPages,
            page = page,
            records = totalRecords,
            rows = (from category in categoriesPage
                    select new
                        {
                            id = category.Id.ToString(),
                            cell = new string[]
                                {
                                    category.Id.ToString(),
                                    category.Name,
                                    category.Description
                                }
                        }).ToArray()
        };
}

这是浏览器收到的json

{
    "total": 1,
    "page": 1,
    "records": 3,
    "rows": [{
        "id": "1",
        "cell": ["1", "Category 1", null]
    }, {
        "id": "3",
        "cell": ["3", "Category 3", "asAS"]
    }, {
        "id": "4",
        "cell": ["4", "Category 4", null]
    }]
}

这是带有 jqgrid 的 .js 文件

jQuery("#ajaxGrid").jqGrid({
    url: $("#ServiceUrl").val(),
    datatype: "json",
    jsonReader: { repeatitems: false, id: "Id" },
    colNames: ['Id', 'Name', 'Description'],
    colModel: [
        { name: 'id', editable: true, sortable: true, hidden: true, align: 'left' },
        { name: 'name', editable: true, sortable: true, hidden: false, align: 'left' },
        { name: 'description', editable: true, sortable: true, hidden: false, align: 'left' }
],
    mtype: 'GET',
    rowNum: 15,
    pager: '#ajaxGridPager',
    rowList: [10, 20, 50, 100],
    caption: 'List of Categories',
    imgpath: $("#ServiceImagesUrl").val(),
    altRows: true,
    shrinkToFit: true,
    viewrecords: true,
    autowidth: true,
    height: 'auto',
    error: function(x, e)
    {
        alert(x.readyState + " "+ x.status +" "+ e.msg);
    }
});

function updateDialog(action) {
    return {
        url: $("#ServiceUrl").val(),
        closeAfterAdd: true,
        closeAfterEdit: true,
        afterShowForm: function (formId) { },
        modal: true,
        onclickSubmit: function (params) {
            var list = $("#ajaxGrid");
            var selectedRow = list.getGridParam("selrow");
            params.url += "/" + list.getRowData(selectedRow).Id;
            params.mtype = action;
        },
        width: "300",
        ajaxEditOptions: { contentType: "application/json" },
        serializeEditData: function (data) {
            delete data.oper;
            return JSON.stringify(data);
        }
    };
}

jQuery("#ajaxGrid").jqGrid(
    'navGrid',
    '#ajaxGridPager',
     {
         add: true,
         edit: true,
         del: true,
         search: false,
         refresh: false
     },
     updateDialog('PUT'),
     updateDialog('POST'),
     updateDialog('DELETE')
);

顺便说一句,如果我想返回 jqGridData 而不是动态的,我应该怎么做?Did 也显示空行:

public class jqGridData<T> where T : class
{
    public int page { get; set; } 
    public int records { get; set; } 
    public IEnumerable<T> rows { get; set; } 
    public decimal total { get; set; } 
}

public jqGridData<Category> GetGridData(int rows, int page, string sidx, string sord)
        {
            var pageSize = rows;
            var index = sidx;
            var order = sord;
            var categories = Uow.Categories.GetAll().OrderBy(t => (string.IsNullOrEmpty(index) ? "Id" : index) + " " + (order ?? "desc"));
            var pageIndex = Convert.ToInt32(page) - 1;
            var totalRecords = categories.Count();
            var totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
            var categoriesPage = categories.Skip(pageIndex * pageSize).Take(pageSize);

            return new jqGridData<Category>
            {
                page = page,
                records = totalRecords,
                total = totalPages,
                rows = categoriesPage
            };
        }

提前致谢!!!吉列尔莫。

4

1 回答 1

0

好吧,我不敢相信,但列名就是这样。第一个字母应该大写,因为它在发送的数据中是大写的。

于 2012-12-16T04:43:29.890 回答