Le bouton jQuery cliquez sur le rafraîchissement de jqGrid ne se déclenchant qu’une fois

J’ai le code jQuery suivant que j’utilise pour remplir un jqGrid. Cela fonctionne parfaitement en postant sur ma page ASP.NET MVC dès le premier clic sur le bouton. ma
Le problème, c’est que tous les autres clics passés au-delà du premier clic semblent traverser le code jQuery lorsque vous cliquez sur le bouton, mais ils ne parviennent jamais à la page du POST. Des idées pourquoi?

 $(document).ready(function() { $('#btnSubmit').click(function() { /* Refreshes the grid */ $("#list").jqGrid({ /* The controller action to get the grid data from */ url: '/CRA/AddPart', data: { partNumber: "123"}, datatype: 'json', mtype: 'GET', /* Define the headers on the grid */ colNames: ['col1', 'col2', 'col3', 'col4'], /* Define what fields the row columns come from */ colModel: [ { name: 'col1', index: 'invid', width: 290 }, { name: 'col2', index: 'invdate', width: 290 }, { name: 'col3', index: 'amount', width: 290, align: 'right' }, { name: 'col4', index: 'tax', width: 290, align: 'right'}], height: 'auto', rowNum: 10, rowList: [10, 20, 30], sortname: 'id', sortorder: "desc", viewrecords: true, imgpath: '../../Scripts/jgrid/themes/steel/images', caption: 'Core Return Authorization Contents:', cellEdit: true }); }); });  

La grid ne recharge pas parce que vous appelez la mauvaise méthode. La méthode jqGrid effectue approximativement ceci:

  1. Examinez le tableau pour voir s’il s’agit déjà d’une grid. si c’est le cas, quittez.
  2. Tournez la table dans une grid.
  3. Remplir la première page de données.

Ainsi, la deuxième fois que vous appelez la méthode, celle-ci ne fait rien, comme à l’étape 1.

Au lieu de cela, vous devriez appeler $("#list").sortinggger("reloadGrid") lors du deuxième clic et de tous les clics suivants.

Maintenant, à cause de votre type de méta dans les options de la grid, la grid va faire un GET, pas un POST. Ainsi, si le POST provient du bouton lui-même (en d’autres termes, il s’agit d’une entrée de type submit), vous devez renvoyer true pour indiquer que l’envoi doit continuer comme d’habitude.

Voici la solution:

  

Parce que je dois POSTER de nouvelles valeurs à l’Action pour moi, cela ne fonctionne pas “reloadGrid”.

Je supprime simplement tout le contenu et crée à nouveau la table vide.

Dans le si je vérifie si la grid est là pour masquer le “diagramme vide” div (il montre juste un message). Dans le cas contraire, je nettoie simplement la div qui entoure la table, puis j’ajoute à nouveau à l’intérieur de la table. Lorsque le plugin trouve la table vide, il charge à nouveau complètement la grid.

LoadTableData est la fonction qui possède la fonctionnalité commune pour créer et charger la grid.

Cette solution n’est probablement pas élégante, mais lorsque le temps presse,

 $("#btnDownloadsPerFile").click(function () { if ($('#chartContainerDownloadsPerFile .ui-jqgrid').length == 0) { $('#chartContainerDownloadsPerFile .emptyChart').hide(); } else { $('#chartContainerDownloadsPerFile').empty(); $('#chartContainerDownloadsPerFile').append('
'); } LoadTableData("downloadsPerFileGrid", $('#ddlportalOptionsDownloadsPerFile').val(), "downloadsPerFile", $('#ddlTimeOptionsDownloadsPerFile').val(), $('#ddlTimeValuesDownloadsPerFile').val(), $('#ddlCounsortinges').val()); });