【问题标题】: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,然后我可以在视图中进行字符串检查。但是,这似乎对性能不友好,所以我想以更合适的方式来做。

谢谢。

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    ViewBag 是一个动态字典。您需要将其转换为特定类型 IEnumerable&lt;AppPrivilege&gt; 以便您可以在其上运行 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>
       }
    }
    

    【讨论】:

    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2021-10-08
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多