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 ?

Pourquoi mon appel ASP.NET MVC $.post à jqGrid renvoie-t-il une valeur non définie dans la liste déroulante ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-11 08:49:431001parcourir

Why is my ASP.NET MVC $.post Call to jqGrid Returning an Undefined Value in the Dropdown?

Dépannage des problèmes de population avec ASP.NET MVC et jqGrid Dropdown

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn