ASP.NET MVC ViewBag liste de la classe anonyme déclenche une erreur sur la méthode Count()
J'ai un serverside code où je suis de retour d'une liste de la classe anonyme à partir de la base de données:
public ActionResult DisplayMap()
{
ViewBag.Checkins = (from locationUpdate in db.LocationUpdates
select new
{
locationUpdate,
locationUpdate.User
}).ToList();
return View();
}
Au Rasoir page, je veux obtenir le nombre de cette liste:
@if (ViewBag.Checkins.Count() > 0)
{ ... }
Cependant, il renvoie une erreur:
An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred
in System.Core.dll but was not handled in user code.
Additional information: 'object' does not contain a definition for 'Count'
Quand je tape ViewBag.Checkins
dans la fenêtre exécution, j'obtiens:
ViewBag.Checkins
{System.Collections.Generic.List<<>f__AnonymousType6<MY_APP.LocationUpdate,MY_APP.User>>}
[0]: { locationUpdate = {System.Data.Entity.DynamicProxies.LocationUpdate_4532566693B61EF657DDFF4186F1D6802EA1AC8D5267ED245EB95FEDC596E129}, User = {System.Data.Entity.DynamicProxies.User_816C8A417B45FE8609CD1F0076A5E6ECBAB0F309D83D2F8A7119044B1C6060CF} }
La Checkins
objet est en effet un List
, et les données sont correctes. J'ai essayé Count
, Length
trop (sans appel de méthode, tout comme les propriétés), mais pas de chance. Ce que je fais mal?
Pouvez-vous essayer d' <span>@ViewBag.Archivages.ToString()</span>, et voir ce qu'il sort?
OriginalL'auteur Can Poyrazoğlu | 2014-04-29
Vous devez vous connecter pour publier un commentaire.
ViewBag
estdynamic
, tandis queCount
est un extension méthode, qui n'est pas pris en charge de manière dynamique (il doit être lié au moment de la compilation).Vous pouvez lancer une
IEnumerable<dynamic>
, ou utiliser la méthode statique directement:ou
Ou créer un fortement typées modèle avec un
Checkins
bien et éviterViewBag
tout à fait.MODIFIER
Puisque vous êtes juste envie de vérifier si le nombre est supérieur à 0,
Any
est plus approprié (et peut sauver du temps de traitement en fonction du scénario):Enumerable.Count
travaillé, merci.OriginalL'auteur D Stanley
Le viewbag est la dynamique qui en font un type anonyme, générés en interne. Il est préférable d'utiliser des modèles de vue à la place.
puis d'appeler la vue avec son modèle, faire quelque chose comme ceci:
dans vous de rasoir vue
@Model.Count()
sera de retour la valeur attendueOriginalL'auteur Oualid KTATA
Vous avez besoin pour lancer votre objet depuis le viewbag est dynamique. Par exemple:
vous n'avez pas besoin de le jeter.
J'ai essayé de casting pour
List<object>
mais il ne fonctionne pas non plus (List<object> devient nulle)Parce que c'est pas un
List<object>
, c'est une liste de quelques-uns type anonyme. Vous convertir enIEnumerable<object>
depuisIEnumerable<T>
est covariant.mais ne sont pas tous les types de dériver de
object
?OriginalL'auteur JuhaKangas
Vous pouvez faire ceci:
OriginalL'auteur Alekz Varkatzas