Maison > développement back-end > C++ > Pourquoi mon formulaire ASP.NET MVC Soumission lance-t-il un décalage de type d'article 'ViewData: s'attendre à l'erreur' ienumerable 'mais a reçu' System.int32 '' '?

Pourquoi mon formulaire ASP.NET MVC Soumission lance-t-il un décalage de type d'article 'ViewData: s'attendre à l'erreur' ienumerable 'mais a reçu' System.int32 '' '?

Patricia Arquette
Libérer: 2025-02-03 03:01:09
original
207 Les gens l'ont consulté

Why Does My ASP.NET MVC Form Submission Throw a

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:

  • La propriété CategoryID de votre modèle de vue est une int.
  • La liste déroulante dans votre vue nécessite un IEnumerable<SelectListItem> pour remplir ses options.
  • La méthode GET du contrôleur remplit correctement la liste déroulante, mais la méthode Post ne la repeuple pas.

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

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!

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