2010-11-23 5 views
0

J'ai installé la grille jquery dans un projet mvc et l'ai connectée à l'interface utilisateur jquery. La charge initiale est correcte et voir les appels à l'action dans le contrôleur et les résultats sont affichés comme prévu. Si je clique sur l'un des en-têtes pour trier - rien ne se passe et l'action n'est pas appelée dans le contrôleur. Je n'ai aucune erreur dans firebug - juste aucun événement.Les événements jqGrid ne se déclenchent pas

Ai-je raté quelque chose?

public ActionResult GetRateTypes(string sidx, string sord, int page, int rows) 
     { 
      int totalPages = 1; // we'll implement later 
      int pageSize = rows; 
      int totalRecords = 3; // implement later 

      var jsonData = new 
      { 
       total = totalPages, 
       page = page, 
       records = totalRecords, 
       rows = new[]{ 
        new {id = 1, cell = new[] {"1", "-7", "Is this a good question?"}}, 
        new {id = 2, cell = new[] {"2", "15", "Is this a blatant ripoff?"}}, 
        new {id = 3, cell = new[] {"3", "23", "Why is the sky blue?"}} 
       } 
      }; 
      return Json(jsonData, JsonRequestBehavior.AllowGet); 
     } 


<script type="text/javascript"> 
     jQuery(document).ready(function() { 
      jQuery("#list").jqGrid({ 
      url: '/Configuration/GetRateTypes', 
       datatype: 'json', 
       mtype: 'GET', 
       colNames: ['Code', 'Name', 'Rate'], 
       colModel: [ 
      { name: 'Code', index: 'Code', width: 40, align: 'left' }, 
      { name: 'Name', index: 'Name', width: 40, align: 'left' }, 
      { name: 'Rate', index: 'Rate', width: 400, align: 'left'}], 
       pager: jQuery('#pager'), 
       rowNum: 1, 
       rowList: [5, 10, 20, 50], 
       sortname: 'Code', 
       sortorder: "desc", 
       viewrecords: true, 
       imgpath: '/css/blitzer/', 
       caption: 'Interest Rate Types' 
      }); 
     }); 
    </script> 

Répondre

0

Si vous utilisez datatype: 'json', le serveur est responsable du tri et de la pagination des données. Votre code serveur actuel (GetRateTypes) ne le fait pas. Regardez this vieille réponse par exemple qui montre comment le tri et la pagination peuvent être mis en œuvre.

+0

Merci pour la réponse. Je sais que l'action ne fait aucun tri et l'a laissé comme ça pour la simplicité. Le problème que j'ai est que l'événement de tri ne renvoie pas à l'action. Lorsque vous cliquez sur les en-têtes de colonne, l'événement n'est pas déclenché et l'action dans le contrôleur n'est pas appelée. – Chev

+0

@Chev: Si l'on clique sur les en-têtes de colonnes, la grille sera juste rechargée et 'GetRateTypes' sera appelée avec d'autres valeurs' sidx' et 'sord'. – Oleg

+0

@Chev: Probablement vous avez également supprimé "pour plus de simplicité" certaines options utilisées dans jqGrid également? Par exemple, si vous utilisez 'loadonce: true', après le premier interlocuteur, le' datatype: 'json'' sera changé en 'datatype:' local'' et l'action comme le tri et la pagination se fera localement sans aucun appel de votre part composants du serveur. Vérifiez que vous postez le code que vous utilisez vraiment. De l'autre côté, le paramètre par défaut 'align: 'left'' vous pouvez supprimer de tout élément' colModel' et le paramètre obsolète 'imgpath' devrait également être supprimé car il n'est pas utilisé par jqGrid. – Oleg

0

Il est probable qu'il ne soit pas trié car jqGrid ne sait pas comment trier. Essayez d'appliquer la propriété 'sorttype' pour chaque colonne de la propriété colModel. Lire de plus près le documentation

+0

Merci pour la réponse. Je sais que l'action ne fait aucun tri et l'a laissé comme ça pour la simplicité. Le problème que j'ai est que l'événement de tri ne renvoie pas à l'action. Lorsque vous cliquez sur les en-têtes de colonne, l'événement n'est pas déclenché et l'action dans le contrôleur n'est pas appelée. – Chev

Questions connexes