Comment puis-je obtenir ViewBag valeur dans ASP.NET MVC ?
Je suis en utilisant ASP.NET MVC, Razor moteur de vue, et je suis en train d'utiliser Viewbag. Le code suivant ne fonctionne pas pour moi. Dans le contrôleur, j'ai
ViewBag.courses = new List<dynamic>();
ViewBag.courses.Add(new { Name = "Math" });
puis dans la vue j'ai
@foreach(dynamic course in ViewBag.courses)
{
<li>@course.Name</li>
}
Mais il me donne un message d'erreur indiquant que l'objet n'est évidemment pas une définition de Nom. Le débogueur me donne de la valeur, et montre tout correctement. Est-il possible d'obtenir que cela fonctionne? (J'ai une solution de contournement déjà, j'ai juste serait plutôt l'utiliser).
Merci d'avance.
Vous n'êtes pas le passage d'un viewmodel parce que... (variables dynamiques pour que mesure vont seulement vous obtient dans l'ennui et très beaucoup de votre talon d'achille quand il s'agit de la mise à jour/refactoring plus tard).
OriginalL'auteur mirhagk | 2012-04-23
Vous devez vous connecter pour publier un commentaire.
Personnellement, j'aimerais le résoudre en utilisant les éléments suivants:
Contrôleur:
Et votre point de vue:
D'utiliser des modèles, c'est ce que le point de l'ensemble de la MVC. Il rend la vie tellement plus facile, pour ne pas mentionner les attributs, vous pouvez appliquer le modèle de personnaliser la façon dont il est affiché (templating, etc.). [Ab]à l'Aide de
dynamic
la façon dont vous êtes va prêter votre site à de futurs problèmes, ne pas mentionner un tas de chat et de la souris va-et-vient ("qu'ai-je nom que la propriété?", "ce type de valeur est 'foo'?", ...), en ignorant si il y a quelqu'un d'autre qui a besoin de travailler sur le code que vous générez.OriginalL'auteur Brad Christie
Brad Christie's ViewModel approche est plus solide, le compilateur peut intercepter les erreurs dans votre Vue plus tôt, plutôt que lorsqu'il est plus coûteux à corriger les erreurs, c'est à dire en cours d'exécution; considérant que si vous avez utilisé dynamique, vous êtes sur votre propre. Et en faisant dynamique sur le type anonyme ne fonctionne pas, soit, après avoir dit que j'ai essayé une fois la persistance des types anonymes dynamique, ce n'est pas un vilain hack; mais je veux encore mon point de Vue les erreurs d'être pris plus tôt au lieu de cela, peut être effectuée via ViewModel.
Si vous voulez toujours utiliser dynamique, vous avez juste besoin d'un bon sérialiseur de persister anonyme valeurs de Contrôleur de Vue. Vous pouvez faire cela sur votre Contrôleur:
Et sur votre façon de voir:
Dans ce que j'ai essayé, Sérialiseur Json est un bon candidat pour la sérialisation des besoins, elle peut imiter l'ensemble de l'objet graphique
Le Sérialiseur Json composant que j'ai utilisé: http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/08/22/using-c-4.0-and-dynamic-to-parse-json.aspx
OriginalL'auteur Michael Buen