在Razor中,如何根据元素的属性检查ViewBag IEnumerable对象中是否存在对象?

时间:2016-08-16 18:40:27

标签: c# asp.net-mvc razor

我有一个名为AppPrivilege的模型对象,它包含一个名为PrivilegeName的公共字符串属性。在控制器中,我生成这些对象的集合,并将它们放在ViewBag中,如下所示(其他对象类型都是我的项目自定义的):

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

现在在视图中,我如何检查是否存在任何AppPrivilege我选择的PrivilegeName元素,例如&#34; Read&#34;例如?以下是我在视图中尝试实现的结构:

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

            }
        }   

我解决这个问题的方法包括生成一个连接的所有PrivilegeName值的潜在大字符串,然后通过ViewBag传递,我可以在视图中进行字符串检查。然而,这似乎不是性能友好,所以我想以更恰当的方式做到这一点。

谢谢。

1 个答案:

答案 0 :(得分:3)

ViewBag是一个动态字典。您需要将其强制转换为特定类型IEnumerable<AppPrivilege>,以便您可以在其上运行LINQ扩展方法。

以下是使用Any()方法查看ViewBag.PrivilegeSet集合中存在PrivilegeName“Read”的一个项目的代码

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