2009-05-17 4 views
4

Ce message d'erreur me rend fou.Il n'y a aucun élément ViewData avec la clé 'Blah' de type 'IEnumerable <SelectListItem>'

Je l'obtiens en utilisant Html.ListBox et Html.DropDownList HtmlHelpers avec ASP.NET MVC v1.0. Le remplissage des listes fonctionne bien - je peux les voir, etc - mais quand je vais créer un nouvel enregistrement dans le Modèle en utilisant la FormCollection passée dans le Contrôleur pour obtenir la valeur sélectionnée, cette erreur se produit. J'ai essayé plusieurs configurations différentes et arrangements de code selon plusieurs autres messages sur cette matière - aucune joie.

J'espère que quelqu'un peut me dire si c'est un problème connu ou non, car je peux continuer ma vie! Préférerait ne pas avoir à poster du code si nécessaire, mais peut le faire si demandé.

Oh, et une solution proposée/solution serait bien trop ;-)

TIA!

Bernard. Ok, mise à jour rapide, j'ai posté trois commentaires aux réponses ci-dessous éclaircissant les détails de ce que je suis en place ici.

J'ai maintenant un autre problème à partager - J'ai essayé l'approche alternative recommandée par ScottGu - l'implémentation d'un ModelView. Donc, quand je fais cela, c'est fondamentalement le même scénario, mais je reçois une "Référence d'objet non définie sur une instance d'un objet". erreur au même endroit que je recevais "Il n'y a aucun élément ViewData avec la clé 'Blah' de type 'IEnumerable'.".

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

+0

Pouvez-vous écrire votre méthode d'action? –

+0

// POST:/Travail/Créer [AcceptVerbs (HttpVerbs.Post)] public ActionResult Créer (collection FormCollection) {{ essayer // obtenir les variables prêt int ID de tâche, taskID; int.TryParse (collection ["Travaux"], out jobID); int.TryParse (collection ["Tâches"], out taskID); // configuration de l'objet métier var work = new Work(); work.Comment = collection ["Commentaire"]; work.Job = dataSourceJob.GetJob (ID_travail); work.Task = dataSourceTask.GetTask (ID_tâche); // mettre à jour la base de données et renvoyer dataSourceWork.Add (travail); return RedirectToAction ("Index"); } catch { return(); } } – Bernard

+1

Oh, ça a l'air vraiment méchant. Désolé mate - j'espère que vous pouvez démêler ce code! – Bernard

Répondre

2

Ok, sooo je suis clairement un Noob EF/MVC ...

Bien que la question a été résolue par mon fait mettre en œuvre la gestion des exceptions appropriée ... le message d'exception (quand je fait a commencé à l'attraper) était "La relation entre les deux objets ne peut pas être définie car ils sont attachés à différents objets ObjectContext.". J'utilise donc le même ObjectContext pour tous les accès aux données, et les choses sont de nouveau sur la bonne voie.

Merci pour le soin, j'aurai une question plus intelligente la prochaine fois - promesse!

Bernard.

0

Ne sachant pas comment vous codez ce sera difficile pour les gens d'identifier la zone problématique. Avoir une lecture de ce fil de discussion - plus bas a une erreur similaire à vous.

http://forums.asp.net/p/1320426/2623986.aspx

+0

Ok, excuses, je n'ai pas fourni beaucoup de détails - j'espérais que c'est un problème assez largement rencontré. Fondamentalement, ce que je suis en train de faire est ce que ScottGu parle à travers ici: http://nerddinnerbook.s3.amazonaws.com/Part6.htm Je veux poster un résultat 'Create' ou 'Edit' à le controlle. – Bernard

+0

L'erreur se produit à "work.Task = dataSourceTask.GetTask (taskID);". J'utilise Entity Framework. Les propriétés Job et Task de la structure Work sont EntityReferences. Le bizzare, c'est que tout fonctionne bien jusqu'à l'accident. Mes variables jobID et taskID sont remplies, work.Job est bien rempli, l'erreur se produit toujours quand je vais faire _anything_ au-delà de peupler la première structure référencée (oui, j'ai essayé de manipuler le code pour faire autre chose, remplir la tâche d'abord, etc - toujours la même erreur). J'espère que vous pouvez aider! Cheers, Bernard. – Bernard

0

Vous pouvez à nouveau lier votre liste de sélection dans la méthode de publication correspondante où la validation a lieu. Par exemple vous avez une erreur dans la vue de création du contrôleur que vous pouvez lier à nouveau la liste déroulante dans la méthode create post.

Questions connexes