2016-08-16 1 views
0

Ich habe ein Modellobjekt namens AppPrivilege, und es enthält eine öffentliche Zeichenfolge-Eigenschaft namens . In einem Controller, erzeuge ich eine Sammlung dieser Objekte, und legte sie in den ViewBag, wie folgt (die anderen Objekttypen sind alle benutzerdefinierten mein Projekt):In Razor, wie die Existenz eines Objekts in ViewBag IEnumerable-Objekt basierend auf einer Eigenschaft des Elements überprüft?

SQLRolerecord toCheckPrivs = new SQLRolerecord(); 
IEnumerable<AppPrivilege> privsOfUser = toCheckPrivs.getPrivsForRole(roleUser);   
ViewBag.PrivilegeSet = privsOfUser; 
return View(); 

Jetzt in einer Ansicht, wie kann ich überprüfen Gibt es ein Element AppPrivilege, das eine meiner Wahl, wie zum Beispiel "Lesen" hat? Hier ist die Struktur I in der Ansicht zu erreichen versuchen:

@if (ViewBag.PrivilegeSet != null) 
     { 
      if(ViewBag.PrivilegeSet.Contains(/*search criteria for PrivilegeName*/)) 
      { 
       //valid code here 

      } 
     } 

Mein Ansatz, diese Anforderung zu adressieren bestand eine potentiell große Zeichenfolge aller verketteten PrivilegeName Werte zu erzeugen, und nebenbei, dass durch die ViewBag, auf die ich könnte String-Überprüfung in der Ansicht tun. Dies scheint jedoch nicht leistungsfreundlich zu sein, also möchte ich es auf eine angemessenere Weise tun.

Vielen Dank.

Antwort

2

ViewBag ist ein dynamisches Wörterbuch. Sie müssen es auf den spezifischen Typ IEnumerable<AppPrivilege> umwandeln, damit Sie die LINQ-Erweiterungsmethoden dafür ausführen können.

Hier ist der Code, der die Any() Methode verwenden, bei leaset ein Element gibt es in der ViewBag.PrivilegeSet Sammlung mit dem PrivilegeName „Read“

@if (ViewBag.PrivilegeSet != null) 
{ 
    var items = ViewBag.PrivilegeSet as IEnumerable<AppPrivilege>; 
    if(items.Any(d=>d.PrivilegeName=="Read")) 
    { 
    <h1>Exist!</h1> 
    } 
} 
+0

Dank zu sehen! Es funktionierte. Gibt es einen Nachteil bei der Verwendung von '==' anstelle einer String-Methode? – ITWorker

+1

In diesem String zu String-Vergleich bevorzuge ich '=' für die Lesbarkeit. Hier ist ein guter Beitrag dazu https://blogs.msdn.microsoft.com/csharpfaq/2004/03/29/when-should-i-use-and-when-should-i-use-equals/ – Shyju

Verwandte Themen