jqGrid没有显示MVC中的json数据

问题描述:

jqGrid没有显示从MVC控制器获取的json数据,它也有一个空记录标签,在这种情况下也是不可见的。这里是我的jQuery代码 -jqGrid没有显示MVC中的json数据

$(function() { 
      $("#JQGrid1").jqGrid({ 
       url: "/CertificateDetails/GetCertificateDetails", 
       datatype: 'json', 
       mtype: 'Get', 
       colNames: ['Name', 'Issuer', 'Location', 'Private Key[Yes/No]'], 
       //data: dataArray, 
       colModel: [ 
        { 
         key: false, 
         name: 'Name', 
         index: 'Name', 
         editable: false 
        }, 
        { 
         key: false, 
         name: 'Issuer', 
         index: 'Issuer', 
         editable: false 
        }, 
        { 
         key: false, 
         name: 'Location', 
         index: 'Location', 
         editable: false 
        }, 
        { 
         key: false, 
         name: 'HasPrivateKey', 
         index: 'HasPrivateKey', 
         editable: false 
        } 
       ], 
       height: '100%', 
       viewrecords: true, 
       caption: "Certificate Details", 
       emptyrecords: "No record to display!!" 
      }); 
     }); 

控制器代码:

CertDetails cd = new CertDetails(); 
     public ActionResult Index() 
     { 
      return View(); 
     } 
     // 
     // GET: /CertificateDetails/ 
     public ActionResult GetCertificateDetails() 
     { 
      var stores = new Dictionary<StoreName, string>() 
       { 
         {StoreName.My, "Personal"}, 
         {StoreName.Root, "Trusted roots"}, 
         {StoreName.TrustedPublisher, "Trusted publishers"}, 
         {StoreName.AddressBook, "Address Book"}, 
         {StoreName.AuthRoot, "Auth Root"}, 
         {StoreName.CertificateAuthority, "Certificate authority"}, 
         {StoreName.Disallowed, "Disallowed"}, 
         {StoreName.TrustedPeople, "Trusted people"} 
       // and so on 
       }.Select(s => new { store = new X509Store(s.Key, StoreLocation.LocalMachine), location = s.Value }).ToArray(); 

      foreach (var store in stores) 
       store.store.Open(OpenFlags.ReadOnly); // open each store 

      var list = stores.SelectMany(s => s.store.Certificates.Cast<X509Certificate2>() 
       .Select(mCert => new CertDetails 
       { 
        HasPrivateKey = mCert.HasPrivateKey ? "Yes" : "No", 
        Name = mCert.FriendlyName != "" ? mCert.FriendlyName : "Unavailable", 
        Location = s.location, 
        Issuer = mCert.Issuer 
       })).ToList(); 

      return Json(list,JsonRequestBehavior.AllowGet); 
     } 

下面是从控制器动作返回的数据方法 -

[{"Name":"Unavailable","HasPrivateKey":"Yes","Location":"Personal","Issuer":"CN=Dell Issuing Certificate Authority 302, OU=MS PKI, O=Dell Inc."},{"Name":"IIS Express Development Certificate","HasPrivateKey":"Yes","Location":"Personal","Issuer":"CN=localhost"}] 

我从得到JSON格式的数据控制器,但jqGrid既不显示任何数据也不显示空记录标签。任何想法如何解决这个问题?

+0

哪个版本** **的jqGrid的使用并从其中** jqGrid的fork **([free jqGrid](https://github.com/free-jqgrid/jqGrid),商业的[Guriddo jqGrid JS](http://guriddo.net/?page_id=103334)或者旧版jqGrid版本 Oleg

+0

@Oleg,我正在使用jQuery.jqGrid免费在nuget上,版本是4.4.4。我在var列表中获取数据,但它没有显示在网格中。 – LogicalDesk

+0

我建议你卸载复古版4.4.4,它已经很长时间没有使用了,并且在当前版本中安装了[free-jqGrid](https://www.nuget.org/packages/free-jqGrid)NuGet包:4.14 0.1。测试JSON数据呢?顺便说一句,我建议你从colModel中删除不需要的'key:false,editable:false'和'index'属性并添加jqGrid选项'loadonce:true,forceClientSorting:true' – Oleg

您可以尝试的jQuery插件数据表代替,像下面:

$(document).ready(function() { 
     $("#myGrid").dataTable({ 
      "ajax": { 
       "url": "/CertificateDetails/GetCertificateDetails", 
       "dataSrc": "" 
      }, 
      "columns": [{ 
       "data": "Name" 
      }, { 
       "data": "Location" 
      }, { 
       "data": "Issuer" 
      }, { 
       "data": "HasPrivateKey" 
      }] 

     }); 
    }); 

<table id="myGrid"> 
    <thead> 
     <tr style="text-align:left;"> 
      <th>Name</th> 
      <th>Location</th> 
      <th>Issuer</th> 
      <th>HasPrivateKey?</th> 
     </tr> 
    </thead> 
     </table> 

不要忘记添加提述─

<link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.9/css/jquery.dataTables.min.css"> 
<script type="text/javascript" charset="utf8" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.0.min.js"></script> 
    <script type="text/javascript" charset="utf8" src="http://cdn.datatables.net/1.10.9/js/jquery.dataTables.min.js"></script>