2016-08-16 75 views
0

我有一個名爲AppPrivilege的模型對象,它包含一個名爲PrivilegeName的公共字符串屬性。在控制器,我產生這些對象的集合,並把他們在ViewBag,如​​下(其他對象類型都定製到我的項目):在Razor中,如何根據元素的屬性檢查ViewBag IEnumerable對象中對象的存在性?

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

現在,我怎麼能檢查是否存在具有我選擇的PrivilegeName的任何元素AppPrivilege,例如「Read」?這是我想在視圖中實現結構:

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

      } 
     } 

我來滿足這種需求的方法包括產生一個潛在的大字符串連接在一起的所有PrivilegeName值,並通過穿過ViewBag中,在我可以在視圖中進行字符串檢查。但是,這似乎不是表現友好的,所以我想以更合適的方式來做。

謝謝。

回答

2

ViewBag是一個動態詞典。您需要將其轉換爲特定類型IEnumerable<AppPrivilege>,以便您可以在其上運行LINQ擴展方法。

這裏是ViewBag.PrivilegeSet集合中的一個項目存在與PrivilegeName其使用Any()方法見leaset代碼「讀」

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

謝謝!有效。使用'=='而不是字符串方法有什麼缺點? – ITWorker

+1

在這個字符串到字符串的比較中,我更喜歡'='來提高可讀性。這裏有一篇關於它的好文章https://blogs.msdn.microsoft.com/csharpfaq/2004/03/29/when-should-i-use-and-when-should-i-use-equals/ – Shyju

相關問題