ASP.NET MVC Formulaire Erreur de soumission: ViewData Type Mismatch
Lors de la soumission d'un formulaire ASP.NET MVC, vous pouvez rencontrer l'erreur "L'élément ViewData qui a la clé" catégorieid "est de type" System.int32 "mais doit être de type" ienumerable "." Cela se produit généralement lorsque votre action de contrôleur s'attend à une collection d'objets SelectListItem
pour une liste déroulante, mais reçoit à la place un seul entier.
Cause profonde:
L'écart découle d'un décalage entre le modèle de vue et les attentes d'action du contrôleur:
CategoryID
de votre modèle de vue est une int
. IEnumerable<SelectListItem>
pour remplir ses options. Cela conduit à un NULL CategoryList
dans la méthode post, provoquant l'erreur. Le framework tente d'utiliser la valeur int
dans ViewData
où un IEnumerable
est attendu, ce qui entraîne le décalage du type.
Solution:
La solution consiste à repeupler la propriété CategoryList
dans la post-action du contrôleur. Cela garantit que les données de liste déroulante sont disponibles même après la soumission du formulaire.
<code class="language-csharp">public ActionResult Create(ProjectVM model) { if (!ModelState.IsValid) { // Repopulate the CategoryList model.CategoryList = new SelectList(db.Categories, "ID", "Name"); return View(model); } // ... save the model and redirect ... }</code>
Comprendre le mécanisme:
La méthode DropDownListFor
Helper récupère la liste de sélection dans le dictionnaire ViewData
à l'aide du nom de la propriété. Si la liste est nul, elle vérifie une entrée ViewData
avec le même nom. Trouver un int
où un IEnumerable
est attendu déclenche l'erreur.
Cette erreur souligne l'importance de la frappe de données cohérente entre vos modèles de vue, les vues et les actions du contrôleur pour les soumissions de formulaire transparentes. Une attention particulière à la gestion des types de données empêche ces pièges MVC courants.
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!