Dépannage "System.int32" vs erreurs "ienumable" dans les listes de chute
Soumettre un formulaire avec une liste déroulante peut parfois entraîner une erreur indiquant un type de type: L'article ViewData
s'attend à un type IEnumerable
(pour les options déroulantes), mais reçoit un System.Int32
à la place.
Cause profonde: Liste de catégorie nul
Cela se produit généralement parce que la propriété CategoryList
dans votre modèle de vue (par exemple, ProjectVM
) est null
lorsque le formulaire est soumis. Le ViewData
s'appuie sur cette propriété pour remplir la liste déroulante.
Solution: repeuplez la liste des catégories dans la méthode post
La solution consiste à repeupler explicitement la propriété CategoryList
dans la méthode post-action de votre contrôleur avant renvoyant la vue. Cela garantit que les données IEnumerable
correctes sont disponibles dans le ViewData
.
Voici comment modifier votre méthode de message:
<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); } // ... (Your existing code to save the model and redirect) ... }</code>
L'ajout de cette ligne recréent le SelectList
et le affecte à model.CategoryList
. Ceci, à son tour, fournit les données IEnumerable
nécessaires à l'assistance DropDownListFor()
à votre avis.
Comment cela fonctionne: ViewData et SelectList
La méthode d'assistance DropDownListFor()
d'assistance (et DropDownList()
) essaie de trouver les données SelectList
appropriées. S'il ne reçoit pas directement un SelectList
, il recherche des données dans ViewData
en utilisant le nom de la propriété (comme «catégorieid»). Si l'élément ViewData
n'est pas couvable à IEnumerable
, l'erreur de décalage de type se produit. En définissant explicitement CategoryList
dans la méthode post, nous contournons ce problème.
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!