2010-11-23 19 views
0

Ich habe das Jquery-Grid in einem MVC-Projekt installiert und es an die jQuery-UI angeschlossen. Initial Load ist in Ordnung und sieht die Aufrufe der Aktion in der Steuerung und die Ergebnisse werden wie erwartet angezeigt. Wenn ich auf einen der Header klicke, um zu sortieren, passiert nichts und die Aktion wird nicht im Controller aufgerufen. Ich habe keine Fehler in Firebug - nur kein Ereignis.jqGrid Ereignisse nicht feuern

Fehle ich etwas?

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> 

Antwort

0

Wenn Sie datatype: 'json' verwenden, dann ist der Server verantwortlich für die Daten sortieren und Paging. Ihr aktueller Server-Code (GetRateTypes) tut dies nicht. Schauen Sie sich this alte Antwort zum Beispiel an, die zeigt, wie das Sortieren und Paging implementiert werden kann.

+0

Danke für die Antwort. Ich weiß, dass die Aktion keine Sortierung durchführt und es der Einfachheit halber so lässt. Das Problem, das ich habe, ist, dass das Sortierereignis nicht auf die Aktion zurückfeuert. Wenn Sie auf die Spaltenüberschriften klicken, wird kein Ereignis ausgelöst, sodass die Aktion im Controller nicht aufgerufen wird. – Chev

+0

@Chev: Wenn man auf die Spaltenköpfe klickt, wird das Grid einfach neu geladen und 'GetRateTypes' wird mit einem anderen' sidx' und 'sord' Wert aufgerufen. – Oleg

+0

@Chev: Wahrscheinlich haben Sie auch "zur Vereinfachung" einige Optionen entfernt, die auch in jqGrid verwendet werden? Wenn Sie zum Beispiel 'loadonce: true' verwenden, wird nach dem ersten vorangestellten' 'datentyp: 'json'' in' datype:' local' geändert und die Aktion wie Sortieren und Paging wird lokal ausgeführt, ohne dass Sie einen Anruf erhalten Serverkomponenten. Stellen Sie sicher, dass Sie den tatsächlich verwendeten Code veröffentlichen. Auf der anderen Seite kann die Standardeinstellung 'align: 'left'' aus allen' colModel' Elementen entfernt werden und der veraltete Parameter 'imgpath' sollte ebenfalls entfernt werden, da er nicht von jqGrid verwendet wird. – Oleg

0

Wahrscheinlich ist es nicht sortieren seit jqGrid kann nicht sortieren. Versuchen Sie, die Eigenschaft 'sorttype' für jede Spalte in der Eigenschaft 'colModel' anzuwenden. Lesen Sie näher die documentation

+0

Danke für die Antwort. Ich weiß, dass die Aktion keine Sortierung durchführt und es der Einfachheit halber so lässt. Das Problem, das ich habe, ist, dass das Sortierereignis nicht auf die Aktion zurückfeuert. Wenn Sie auf die Spaltenüberschriften klicken, wird kein Ereignis ausgelöst, sodass die Aktion im Controller nicht aufgerufen wird. – Chev