2016-08-16 4 views
0

AppPrivilegeというモデルオブジェクトがあり、それにはPrivilegeNameというパブリック文字列プロパティが含まれています。私はどのように確認することができ、ビューで今すぐRazorでは、要素のプロパティに基づいてViewBag IEnumerableオブジェクト内のオブジェクトの存在をチェックする方法は?

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

次のように(他のオブジェクト型は、すべて私のプロジェクトにカスタムされている)、コントローラでは、私はそれらのオブジェクトのコレクションを生成し、ViewBagに入れ私が選択したPrivilegeName(例えば "Read")のような要素があるかどうかを確認してください。ここで私はビューで実現しようとしている構造は次のとおりです。

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

      } 
     } 
この要件に対処する私のアプローチは、連結すべて PrivilegeName値の潜在的に大きな文字列を生成し、ViewBagを通じてそれを渡すから成って

その上にIビュー内で文字列チェックを行うことができます。しかし、これはパフォーマンスが良くないと思われるので、もっと適切な方法でやりたいと思っています。

ありがとうございます。

答えて

2

ViewBagは動的辞書です。 LINQ拡張メソッドを実行できるように、それを特定のタイプのIEnumerable<AppPrivilege>にキャストする必要があります。ここで

PrivilegeName

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

感謝「を読む」でViewBag.PrivilegeSetコレクションに存在するでleasetつの項目を参照してくださいAny()メソッドを使用するコードです!出来た。文字列メソッドの代わりに '=='を使うのに欠点はありますか? – ITWorker

+1

この文字列と文字列の比較では、読みやすさのために '='を使用します。これについての良い記事はこちらhttps://blogs.msdn.microsoft.com/csharpfaq/2004/03/29/when-should-i-use-and-when-should-i-us-equals/ – Shyju

関連する問題