我有一个名为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传递,我可以在视图中进行字符串检查。然而,这似乎不是性能友好,所以我想以更恰当的方式做到这一点。
谢谢。
答案 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>
}
}