Asp.Net MVC jqgrid没有显示我的数据

时间:2018-07-16 14:22:10

标签: asp.net json ajax model-view-controller jqgrid

我正在尝试填充一个jqgrid。呈现网格,但不显示任何数据。我知道我的控制器(通过标准ajax函数调用)正在工作。它返回我期望的数据。

我如何验证jqgrid返回的数据相同,我在做什么错误而不允许支付数据?

jqgrid:

<script type="text/javascript">
   jQuery(document).ready(function() {
        $.ajaxSetup({ cache: false });
        var rvtoken = $("input[name='__RequestVerificationToken']").val();
        var ModuleId = @Dnn.ModuleContext.ModuleId;
        var TabId = @Dnn.ModuleContext.TabId;
        $('#grid').jqGrid({
            url: '/DesktopModules/MVC/CW.GridTest/Item/getArtists2',
            datatype: 'json',
            mtype: 'POST',
            contentType: 'application/json',
            loadBeforeSend: function(jqXHR) {
                jqXHR.setRequestHeader('ModuleId', ModuleId);
                jqXHR.setRequestHeader( 'TabId', TabId);
                jqXHR.setRequestHeader('RequestVerificationToken', rvtoken);
            },
            colNames: ['ArtistID', 'ArtistName', 'City'],
            colModel: [
                { name: 'ArtistID', index: 'ArtistID', width: 80, align: 'left', editable: false },
                { name: 'Name', index: 'ArtistName', width: 120, align: 'left', editable: true },
                { name: 'Location', index: 'City',width: 60,align: 'left',editable: true}
            ],
            loadError: function (jqXHR, textStatus, errorThrown) {
                alert('HTTP status code: ' + jqXHR.status + '\n' +
                    'textStatus: ' + textStatus + '\n' +
                    'errorThrown: ' + errorThrown);
                alert('HTTP message body (jqXHR.responseText): ' + '\n' + jqXHR.responseText);
            },
            loadOnce: true,
            autoencode: true,
            height: '100%',  
            rowNum: 10,    
            emptyrecords: 'No records',  
            sortname: 'ArtistID',
            sortorder: 'desc',
            viewrecords: true,
            caption: 'Artists',
            width: 300,
            gridview: true,
            jsonReader:
                {
                    total: 'total',
                    page: 'page',
                    records: 'records',
                    root: 'rows',
                    repeatitems: false,
                    id: 'ArtistID'
                } 
        });
       jQuery("#grid").jqGrid('navGrid', '#pager', { edit: false, add: false, del: false });
    });
</script>


<div>
    <table id="grid"></table>
    <div id="pager"></div>
</div>

从标准ajax返回的数据:

    {  
       "total":100,
       "page":99,
       "records":6,
       "rows":"[
{\"ArtistID\":1,\"ArtistName\":\"Clayton Knight\",\"City\":\"Tigard\"},
{\"ArtistID\":2,\"ArtistName\":\"Corral Creek Bluegrass\",\"City\":\"Sherwood\"},
{\"ArtistID\":3,\"ArtistName\":\"Never Strangers Band\",\"City\":\"Portland\"},
{\"ArtistID\":5,\"ArtistName\":\"The Hillwilliams\",\"City\":\"Tigard\"},
{\"ArtistID\":7,\"ArtistName\":\"Bobo and the Bobbettes\",\"City\":\"Ellensburg\"},
{\"ArtistID\":27,\"ArtistName\":\"Bobo 5\",\"City\":\"Ellensburg\"}
]"
}

1 个答案:

答案 0 :(得分:0)

这是我的控制者。不是说它没有用,而是没有返回我认为应该的样子。我正在反序列化“行”元素的数据表,然后再次反序列化整个元素。因此,控制器没有返回jqgrid可以实际使用的json字符串。

现在一切正常...

public String getArtists2()
        {
            using (var ac = new ArtistListingController())
            {
                ac.Gets();
                ac.LoadDatatable();
                DataView view = new DataView(ac.Datatable);
                DataTable dt = view.ToTable(false, "ArtistID", "ArtistName", "City");
                var jsonData = new
                {
                    page=1,
                    total = 1, //  (ac.RecordCount + rows - 1) / rows,
                    records = ac.RecordCount,
                    rows = dt //JsonConvert.SerializeObject(dt)
                };
                return JsonConvert.SerializeObject(jsonData);
            }
        }

返回:

{  
   "page":1,
   "total":1,
   "records":6,
   "rows":[  
      {  
         "ArtistID":1,
         "ArtistName":"Clayton Knight",
         "City":"Tigard"
      },
      {  
         "ArtistID":2,
         "ArtistName":"Corral Creek Bluegrass",
         "City":"Sherwood"
      },
      {  
         "ArtistID":3,
         "ArtistName":"Never Strangers Band",
         "City":"Portland"
      },
      {  
         "ArtistID":5,
         "ArtistName":"The Hillwilliams",
         "City":"Tigard"
      },
      {  
         "ArtistID":7,
         "ArtistName":"Bobo and the Bobbettes",
         "City":"Ellensburg"
      },
      {  
         "ArtistID":27,
         "ArtistName":"Bobo 5",
         "City":"Ellensburg"
      }
   ]
}