Maison > développement back-end > C++ > Pourquoi ma liste déroulante ASP.NET MVC jqGrid affiche-t-elle une valeur « non définie » ?

Pourquoi ma liste déroulante ASP.NET MVC jqGrid affiche-t-elle une valeur « non définie » ?

DDD
Libérer: 2025-01-11 08:45:42
original
1010 Les gens l'ont consulté

Why Does My ASP.NET MVC jqGrid Dropdown Show an

Résolution de la valeur « non définie » dans les listes déroulantes ASP.NET MVC jqGrid

Lors du remplissage dynamique des listes déroulantes jqGrid lors de l'édition des données, une valeur "non définie" indésirable apparaît fréquemment. Cela provient d'incohérences entre la structure de données attendue par jqGrid et la méthode de livraison des données.

Format de données jqGrid correct :

Le format idéal pour la valeur de la liste déroulante est : value: "FE:FedEx; IN:InTime; TN:TNT"

Problème avec la méthode actuelle :

L'approche actuelle utilise ASP.NET MVC avec $.ajax() de jQuery pour récupérer les données déroulantes. Un StringBuilder manipule les données récupérées pour correspondre au format de jqGrid, mais une entrée supplémentaire « non définie » persiste.

Résultats du débogage :

Le débogage de FireBug indique que les guillemets supplémentaires introduits par sb.ToString() sont les coupables. jqGrid ajoute ses propres guillemets, conduisant à des guillemets doublés et au problème « non défini ».

Une solution supérieure : utiliser dataUrl et buildSelect

Au lieu de manipuler directement la propriété value, une solution plus robuste consiste à utiliser les propriétés dataUrl et buildSelect de jqGrid dans editoptions ou searchoptions. Ceux-ci permettent une récupération et un formatage de données personnalisés.

Exemple dataUrlAction :

<code class="language-csharp">public JsonResult GetDestinationList() {
    List<string> allDestinations = GetAllDestinations();
    return Json(allDestinations, JsonRequestBehavior.AllowGet);
}</code>
Copier après la connexion

Exemple buildSelect Fonction :

<code class="language-javascript">buildSelect: function(data) {
    var s = '';
    if (data && data.length) {
        for (var i = 0, l = data.length; i < l; i++) {
            s += data[i] + ';'; // Assuming data[i] is already in "key:value" format
        }
        return s.substring(0, s.length - 1); // Remove trailing semicolon
    }
    return s;
}</code>
Copier après la connexion

Mise à jour editoptions :

<code class="language-javascript">{
    name: 'destinations',
    editable: true,
    edittype: 'select',
    editoptions: {
        dataUrl: '/YourController/GetDestinationList', // Replace with your controller action path
        buildSelect: function(data) {
            // ... (buildSelect function from above) ...
        }
    }
}</code>
Copier après la connexion

Remarques importantes :

  • Vous pouvez utiliser Json(allDestinations); sans JsonRequestBehavior.AllowGet, mais vous devrez ajouter ajaxSelectOptions: { type: "POST" } à vos options jqGrid.
  • Dans les versions plus récentes de jqGrid, buildSelect est appelé dans le gestionnaire de succès $.ajax(), ce qui rend jQuery.parseJSON(data.responseText) inutile.

Cette approche révisée fournit une méthode plus propre, plus efficace et moins sujette aux erreurs pour gérer les listes déroulantes jqGrid, éliminant ainsi le problème de valeur « non définie ». N'oubliez pas de remplacer /YourController/GetDestinationList par le chemin réel vers l'action de votre contrôleur.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal