Maison >développement back-end >C++ >Pourquoi mon classeur de modèles MVC ne parvient-il pas à remplir une liste d'objets à partir d'un formulaire ?

Pourquoi mon classeur de modèles MVC ne parvient-il pas à remplir une liste d'objets à partir d'un formulaire ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-21 14:27:11164parcourir

Why is My MVC Model Binder Failing to Populate a List of Objects from a Form?

Dépannage des problèmes de liaison de modèle MVC avec des listes d'objets

Cet article aborde un problème courant dans les applications MVC : l'échec du classeur de modèles à remplir correctement une liste d'objets à partir des données de formulaire. Le symptôme est une liste nulle dans l'action du contrôleur, malgré la soumission du formulaire apparemment correcte.

La cause profonde : les indices manquants

Le principal problème réside dans le manque d’indexation des éléments du formulaire. Sans indices, le classeur de modèles ne peut pas différencier les éléments individuels au sein de la liste. Par exemple, considérons ce scénario : le formulaire contient initialement des éléments sans identifiants uniques.

<code><!-- Incorrect: Missing indices --></code>

La solution : tirer parti des modèles d'éditeur

La solution consiste à utiliser EditorTemplates pour générer automatiquement des éléments de formulaire correctement indexés. Cela élimine l'indexation manuelle et garantit une liaison appropriée du modèle.

Étapes de mise en œuvre :

  1. Créez un dossier EditorTemplates : Créez un nouveau dossier nommé « EditorTemplates » dans votre dossier Views. Ce dossier doit résider dans le même répertoire que vos autres fichiers de vue.

  2. Créer une vue fortement typée : Dans le dossier EditorTemplates, créez un fichier de vue fortement typé dont le nom correspond à votre classe de modèle (par exemple, PlanCompareViewModel.cshtml).

  3. Migrer le contenu de la vue partielle : Déplacez le contenu HTML de votre vue partielle d'origine vers ce modèle d'éditeur nouvellement créé.

  4. Utiliser EditorForModel() : Modifiez votre vue parent pour utiliser la méthode d'assistance EditorForModel(). Cet assistant restituera automatiquement les éléments du formulaire, correctement indexés, en fonction de votre modèle.

<code class="language-csharp">@model IEnumerable<plancompareviewmodel>
@using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" }))
{
    <div>
        @Html.EditorForModel()
    </div>
}</code>

En employant cette approche, le classeur de modèles interprétera et remplira correctement la liste des objets dans l'action de votre contrôleur. L'assistant EditorForModel() génère dynamiquement les index nécessaires pour chaque élément, résolvant ainsi le problème de liaison.

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