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 :
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.
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
).
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éé.
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!