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

标签 c# asp.net-mvc razor

我有一个名为 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/

相关文章:

asp.net-mvc - Asp.Net MVC Core Telerik TreeView 文本显示为未定义

c# - 未找到 System.Security.Cryptography

javascript - 如何在 MVC 中使用警告框而不重定向到其他页面?

c# - 如何将 Razor View 模态属性值传递给 JavaScript 函数

c# - 编码普通结构 : does C# copy them onto heap?

c# - 是否可以在本地主机开发期间选择 Azure 服务配置?例如。云?

c# - 部分 View 未渲染内部 View

asp.net-mvc - 在标签 HTML 中获取新行

c# - 我可以用 java(type)script 异步实现 c# 任务吗?

c# - 如何刷新 Windows 窗体控件的简单绑定(bind)?