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
Libérer: 2025-01-21 14:27:11
original
161 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal