2012-12-15 2 views
0

WebApi (REST), 작업 단위 및 저장소 패턴을 사용하는 Entity Framework 5가있는 ASPNET MVC4 프로젝트에서 jqgrid를 사용하고 있습니다. 내 문제는 브라우저에 json으로 흐르는 데이터가 표시되고 그리드에 세 개의 행이 표시되지만 해당 행은 비어 있으며 데이터는 표시되지 않습니다 (그리드에 빈 행 세 개).webqi (REST)를 사용하여 빈 행을 검색하는 jqgrid

이것은 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이는의 .js가있는 jqGrid로 파일

{ 
    "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] 
    }] 
} 

이다

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를 반환하고 싶다면 어떻게해야합니까? 빈 행도 표시 했습니까?

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

미리 감사드립니다. 기예르모.

답변

0

좋아, 나는 그것을 믿을 수 없다. 그러나 그것은 기둥의 이름에서나 마찬가지였다. 첫 번째 문자는 전송 된 데이터에 대문자로 대문자로 표기해야합니다.

+0

하하입니다. 교훈을 잘 배웠다 : P – Yasser