我有一个名为 AppPrivilege
的模型对象,它包含一个名为 PrivilegeName
的公共(public)字符串属性。在 Controller 中,我生成了这些对象的集合,并将它们放入 ViewBag 中,如下所示(其他对象类型都是我的项目自定义的):
SQLRolerecord toCheckPrivs = new SQLRolerecord();
IEnumerable<AppPrivilege> privsOfUser = toCheckPrivs.getPrivsForRole(roleUser);
ViewBag.PrivilegeSet = privsOfUser;
return View();
现在在 View 中,我如何检查是否存在具有我选择的 PrivilegeName
的任何元素 AppPrivilege
,例如“Read”?这是我试图在 View 中实现的结构:
@if (ViewBag.PrivilegeSet != null)
{
if(ViewBag.PrivilegeSet.Contains(/*search criteria for PrivilegeName*/))
{
//valid code here
}
}
我解决此要求的方法包括生成一个潜在的大字符串,该字符串由所有连接的 PrivilegeName
值组成,然后通过 ViewBag 传递它,我可以根据它在 View 中进行字符串检查。但是,这似乎对性能不友好,所以我想以更合适的方式进行。
谢谢。
最佳答案
ViewBag 是一个动态字典。您需要将其转换为特定类型,IEnumerable<AppPrivilege>
这样您就可以在其上运行 LINQ 扩展方法。
这是使用 Any()
的代码使用 PrivilegeName
查看 ViewBag.PrivilegeSet 集合中至少存在一项的方法“阅读”
@if (ViewBag.PrivilegeSet != null)
{
var items = ViewBag.PrivilegeSet as IEnumerable<AppPrivilege>;
if(items.Any(d=>d.PrivilegeName=="Read"))
{
<h1>Exist!</h1>
}
}
关于c# - 在 Razor 中,如何根据元素的属性检查 ViewBag IEnumerable 对象中是否存在对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982234/