Maison >développement back-end >C++ >Pourquoi mon appel ASP.NET MVC $.post à jqGrid renvoie-t-il une valeur non définie dans la liste déroulante ?
Le problème : Une valeur "non définie" inattendue apparaît dans une liste déroulante jqGrid lorsqu'elle est renseignée dynamiquement à l'aide d'un appel ASP.NET MVC 2 $.ajax(). Cela provient de données mal formatées renvoyées dans la grille. Le jqGrid attend un format spécifique pour les valeurs déroulantes, comme : "FE:FedEx; IN:InTime; TN:TNT"
. L'utilisation de StringBuilder pour le formatage des données entraînait des guillemets supplémentaires et un point-virgule final.
Analyse : L'approche initiale utilisée ContentResult(sb.ToString())
pour renvoyer les données. Bien que fonctionnel, il est moins efficace et sujet aux erreurs de formatage.
La solution : Tirer parti des propriétés dataUrl
et buildSelect
de jqGrid au sein de editoptions
ou searchoptions
offre une solution plus propre et plus robuste. Cela élimine le formatage manuel des chaînes. Le dataUrl
spécifie la source de données et buildSelect
gère le formatage.
Exemple utilisant dataUrl
et buildSelect
:
<code class="language-javascript">{ name: 'destinations', editable: true, edittype: 'select', editoptions: { dataUrl: '<%= Url.Action("GetDestinationList", "Home") %>', buildSelect: function(response) { var s = ''; if (response && response.length) { for (var i = 0; i < response.length; i++) { s += response[i] + ';'; //Note the semicolon placement } } return s; // Removed trailing "" } } }</code>
Considérations sur la méthode HTTP :
Si une requête POST est préférée à GET pour dataUrl
, remplacez Json(allDestinations, JsonRequestBehavior.AllowGet)
par Json(allDestinations)
côté serveur et ajoutez ajaxSelectOptions: { type: "POST" }
aux options jqGrid.
Fonction buildSelect
optimisée :
La fonction buildSelect
fournie peut être légèrement optimisée pour plus de clarté et d'efficacité (bien que fonctionnellement similaire à l'original) :
<code class="language-javascript">buildSelect: function(response) { return (response && response.length) ? response.join(';') : ''; }</code>
Cette approche révisée fournit une méthode plus maintenable et moins sujette aux erreurs pour remplir les listes déroulantes jqGrid.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!