2010-11-29 5 views
1

Je développe l'application ASP.NET MVC 2. Je veux montrer le gird de la liste des données d'objet. comme List<MyObject>. J'ai donc essayé un code dans l'action du contrôleur comme:problème avec jqgrid dans jequery dans asp.net mvc

[HttpGet] 
public ActionResult JsonSalesCollection() 
{ 
    string id = Request.QueryString["id"]; 

    ViewData["TrustId"] = id; 
    Guid id1 = new Guid(id); 

    List<TrustContract> contractList = trustContractmang.GetListOfTrustContractByTrustId(id1); 
    int pageIndex = 12; 
    int pageSize = 20; 
    int totalRecords = contractList.Count(); 
    int totalPages = (int)Math.Ceiling((float)totalRecords/(float)pageSize); 
    string orderBy = string.Format("{0} {1}", "TrustContracId", "desc"); 

    var jsonData = new 
    { 
     total = totalPages, 
     page = 20, 
     records = totalRecords, 
     rows = (
      from s in contractList 
      select new 
      { 
       i = s.TrustContracId, 
       cell = new string[] { 
        s.TrustContracId.ToString(), 
        s.Trust.TrustName.ToString(), 
        s.ContractStartDate.ToShortDateString(), 
        s.ContractEndDate.ToShortDateString(), 
        s.ContractAmount.ToString(), 
        s.RecoveredAmount.ToString(), 
        s.IsCompleted.ToString() 
       } 
      }).ToArray() 
    }; 

    return Json(jsonData); 
} 

Cela fonctionne bien, générant également un résultat JSON. Sur la page de vue, je suis en utilisant un script:

var gridimgpath = '/Scripts/jqgrid/themes/redmond/images'; 

var TrustId = <%= serializer.Serialize(ViewData["TrustId"]) %>; 

// use date.js to calculate the values for this month 
var gridDataUrl = '/NewTrustContract/JsonSalesCollection?id='+ TrustId; 

$("#list").jqGrid({ 
    url: gridDataUrl, 
    datatype: "json", 
    mtype: 'GET', 

    colNames: ['TrustContracId', 'Trust', 'Contract Start Date', 
       'Contract End Date', 'Contract Amount', 'Recovered Amount', 
       'Is Completed'], 
    colModel: [ 
     { name: 'TrustContracId', index: 'TrustContracId', width: 50, align: 'left' }, 
     { name: 'Trust', index: 'Trust', width: 100, align: 'left' }, 
     { name: 'ContractStartDate', index: 'ContractStartDate', width: 100, align: 'left' }, 
     { name: 'ContractEndDate', index: 'ContractEndDate', width: 100, align: 'left' }, 
     { name: 'ContractAmount', index: 'ContractAmount', width: 100, align: 'left' }, 
     { name: 'RecoveredAmount', index: 'RecoveredAmount', width: 100, align: 'right' }, 
     { name: 'IsCompleted', index: 'IsCompleted', width: 100, align: 'right' } 
    ], 
    rowNum: 20, 
    rowList: [10, 20, 30], 
    imgpath: gridimgpath, 
    height: 'auto', 
    width: '900', 
    pager: jQuery('#pager'), 
    sortname: 'TrustContracId', 
    viewrecords: true, 
    sortorder: "desc", 
    caption: "Contract" 
}); 

ok, pour cela, j'utilisé:

< table id="list" class="scroll" cellpadding="0" cellspacing="0" ></table> 
< div id="pager" class="scroll" style="text-align:center;" ></div> 

pour maintenir le grid.I peut même voir la vue de la grille vide à la page .aspx sur la vue. mais n'apparaissant pas de données. Donc, cela signifie que je dois manuellement réitérer les données JSON dans jquery. si oui, alors où je peux obtenir des données JSON dans j requête. et comment l'itérer. Je sais onli $.each est l'utilisation pour les données itérées. mais comment obtenir des données dans var? ou un autre remède pour cette fonctionnalité?

D'où devrais-je obtenir la documentation brève de jqgrid pour lire?

Répondre

0

C'est un peu comment c'est fait. Pour ce succès, je dois utiliser JsonResult au lieu de ActionResult. également besoin d'ajouter l'attribut [AcceptVerbs(HttpVerbs.Get)] avant la définition de l'action. et tandis que le retour j'ai utilisé

return Json(jsonData,JsonRequestBehavior.AllowGet); 

C'est, il fonctionne bien maintenant.