MVC 4 DropDownListFor erreur - Il n'y a pas de ViewData élément de type 'IEnumerable<SelectListItem>" qui a la clé
J'ai un modèle:
public class Auction
{
public string Title { get; set; }
public string category { get; set; }
}
Et un contrôleur:
[HttpGet]
public ActionResult UserForm()
{
var categoryList = new SelectList(new[] { "auto", "elec", "games", "Home" });
ViewBag.categoryList = categoryList;
return View();
}
Dans la Vue que j'ai ces lignes:
<div class="editor-field">
@Html.DropDownListFor(model =>
model.category,(SelectList)ViewBag.categoryList)
@Html.ValidationMessageFor(model => model.category)
</div>
L'erreur que j'obtiens quand j'essaie d'enregistrer le formulaire est:
Il n'y a pas de ViewData élément de type 'IEnumerable" qui
a la clé "catégorie". Description: Une exception non gérée s'est produite
au cours de l'exécution de la demande web actuelle. Veuillez passer en revue les
trace de la pile pour plus d'informations sur l'erreur et où il
d'origine dans le code.Détails De L'Exception: System.InvalidOperationException: Il n'y a pas de
ViewData élément de type 'IEnumerable' qui a la clé
"catégorie".
Je ne comprends pas quel est le problème, depuis que j'ai fait (ou tenté de le faire) tout ce qui est fait dans ce guide:
https://www.youtube.com/watch?v=7HM6kDBj0vE
La vidéo peut également être trouvé dans ce lien (Chapitre 6 - Automatiquement de la liaison de données dans la demande):
http://www.lynda.com/ASPNET-tutorials/ASPNET-MVC-4-Essential-Training/109762-2.html
Vous devez vous connecter pour publier un commentaire.
C'est là votre problème. Je soupçonne que vous n'avez pas reconstruire votre liste dans votre méthode post. Les lignes suivantes de code que vous avez dans votre méthode get doit également être dans votre méthode post, surtout si vous êtes de retour le même point de vue, ou une vue qui utilise
ViewBag.categoryList
dans un dropdownlist.Vous obtenir ce genre d'erreur lorsque vous utilisez un
null
objet avec le dropdownlistfor helper html. Cette erreur peut être facilement reproduit si vous faites quelque chose comme@Html.DropDownListFor(model => model.category,(SelectList)ViewBag.categoryList)
? Si yest alors il n'a pas d'importance d'où il vient. Ce qui importe, c'est que vous offre la vue avec un non NULL liste. Si c'est à partir d'un poste, après vous faites un post les valeurs ne sont plus là, tout simplement parce que vous n'avez pas "post" entre eux.J'ai eu le même problème,je pense que lorsque vous allez créer ViewData de la même table de données dans le Même contrôleur avec un nom différent, il génère une telle erreur,je viens de copier mes vieux ViewData de la vieille fonction(méthode) à la nouvelle fonction(méthode) dans le même contrôleur et qui a fonctionné pour moi.