Il n'y a pas de ViewData élément avec la touche 'Blah' de type 'IEnumerable<SelectListItem>'

Ce message d'erreur est me rend fou.

Je suis arriver lors de l'utilisation de Html.ListBox et Html.DropDownList HtmlHelpers avec ASP.NET MVC v1.0. Le remplissage de la listes des œuvres OK - je peux les voir, etc - mais quand je vais pour créer un nouvel enregistrement dans le Modèle à l'aide de la FormCollection passé dans le Contrôleur pour obtenir la valeur sélectionnée, cette erreur se produit. J'ai essayé plusieurs configurations différentes et code d'arrangements que par plusieurs autres postes sur ce sujet - pas de joie.

J'espère que quelqu'un peut me dire si c'est un problème connu ou pas, afin que je puisse avancer dans ma vie! Préférerait ne pas avoir de poste le code si nécessaire, mais peut faire la demande.

Oh, et une suggestion de solution/contournement serait sympa aussi 😉

TIA!

Bernard.


Ok, mise à jour rapide, j'ai posté trois commentaires à partir des réponses de compensation ci-dessous les détails de ce que je suis jusqu'ici.

J'ai maintenant un autre problème à part - j'ai essayé ScottGu de l'alternative recommandée à l'approche mise en œuvre d'un ModelView. Donc, quand je fais cela, c'est essentiellement le même scénario, mais j'obtiens un "Objet de référence non définie à une instance d'un objet." erreur à l'endroit même où je recevais "Il n'y a pas de ViewData élément avec la touche 'Blah' de type 'IEnumerable'.".

Je commence à penser que ce n'est peut-être quelque chose à voir avec la façon dont fonctionne les EF...

Pouvez-vous écrire votre méthode d'action?
// POST: /Travaux/Créer [AcceptVerbs(HttpVerbs.Post)] public ActionResult Créer(FormCollection collection) { try { // récupérer les variables prêt int jobID, taskID; int.TryParse(collection["Emplois"], jobID); int.TryParse(collection["Tâches"], id de la tâche); // configuration de l'objet métier var = nouveau Travail(); travail.Commentaire = collection["Commentaire"]; travail.Job = dataSourceJob.GetJob(jobID); travail.Task = dataSourceTask.GetTask(l'id de la tâche); // mise à jour de la db et de retour dataSourceWork.Ajouter(de travail); return RedirectToAction("Index"); } catch { return View(); } }
Oh, ça a l'air de vraiment méchant. Désolé mate - j'espère que vous pouvez démêler ce code!

OriginalL'auteur Bernard | 2009-05-17