在 Razor 中,如何根据元素的属性检查 ViewBag IEnumerable 对象中是不是存在对象?
Posted
技术标签:
【中文标题】在 Razor 中,如何根据元素的属性检查 ViewBag IEnumerable 对象中是不是存在对象?【英文标题】:In Razor, how to check existence of an object in ViewBag IEnumerable object based on a property of the element?在 Razor 中,如何根据元素的属性检查 ViewBag IEnumerable 对象中是否存在对象? 【发布时间】:2016-08-16 18:40:26 【问题描述】:我有一个名为AppPrivilege
的模型对象,它包含一个名为PrivilegeName
的公共字符串属性。在控制器中,我生成了这些对象的集合,并将它们放在 ViewBag 中,如下所示(其他对象类型都是我的项目自定义的):
SQLRolerecord toCheckPrivs = new SQLRolerecord();
IEnumerable<AppPrivilege> privsOfUser = toCheckPrivs.getPrivsForRole(roleUser);
ViewBag.PrivilegeSet = privsOfUser;
return View();
现在在一个视图中,我如何检查是否存在具有我选择的PrivilegeName
的任何元素AppPrivilege
,例如“读取”?这是我试图在视图中实现的结构:
@if (ViewBag.PrivilegeSet != null)
if(ViewBag.PrivilegeSet.Contains(/*search criteria for PrivilegeName*/))
//valid code here
我解决此要求的方法包括生成一个可能较大的所有PrivilegeName
值连接的字符串,并将其传递给 ViewBag,然后我可以在视图中进行字符串检查。但是,这似乎对性能不友好,所以我想以更合适的方式来做。
谢谢。
【问题讨论】:
【参考方案1】:ViewBag 是一个动态字典。您需要将其转换为特定类型 IEnumerable<AppPrivilege>
以便您可以在其上运行 LINQ 扩展方法。
这里是使用Any()
方法查看ViewBag.PrivilegeSet 集合中至少存在一个项目的代码,其中PrivilegeName
“读取”
@if (ViewBag.PrivilegeSet != null)
var items = ViewBag.PrivilegeSet as IEnumerable<AppPrivilege>;
if(items.Any(d=>d.PrivilegeName=="Read"))
<h1>Exist!</h1>
【讨论】:
谢谢!有效。使用==
代替字符串方法有什么缺点吗?
在这个字符串到字符串的比较中,为了便于阅读,我更喜欢=
。这是一篇关于它的好帖子blogs.msdn.microsoft.com/csharpfaq/2004/03/29/…以上是关于在 Razor 中,如何根据元素的属性检查 ViewBag IEnumerable 对象中是不是存在对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Razor 视图中基于安全性隐藏特定元素,而视图中没有逻辑?
如何在 razor MVC 4 中添加具有条件值的第二个 css 类