0

私は WebApi (REST) を使用した ASPNET MVC4 プロジェクトで jqgrid を使用しています。Entity Framework 5 は Unit Of Work と Repository パターンを使用しています。私の問題は、データが json としてブラウザーに流れているのを見て、グリッドに 3 つの行が表示されることですが、それらの行は空であり、データは表示されません (グリッドに 3 つの空の行)。

これは、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 に答える