【问题标题】:Working with Collections containing Collections in Asp.Net MVC在 Asp.Net MVC 中使用包含集合的集合
【发布时间】:2011-12-18 19:41:14
【问题描述】:

在这个问题上寻找一些指导(下面是一个平行的例子):

我有一个视图,我需要在其中显示每行的基本用户信息列表(例如名字/姓氏)。此外,我需要提供代表每个用户权限级别的复选框列表。每个人的可能权限列表都是相同的;但是,需要由数据库动态驱动,因为可能会添加或删除不同的权限集。

所以...我有一个用户列表,以及一个需要为每个用户跟踪的常见但可变的权限列表。

在 ASP.Net 视图中从对象绑定的角度来管理此问题的最佳方法是什么?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    我用EditorTemplates解决了一个类似的场景

    您可以在 AssignPermissionViewModel 中有一个 Users 集合,在每个用户 (UserModel) 中有一个 Permission 集合。然后在您的 AssignPermission 视图中,您应该呈现用户编辑器:

    @Html.EditorFor(model => model.Users) //here model is a AssignPermissionViewModel
    

    在用户编辑器模板中,您应该呈现权限模板:

    @Html.EditorFor(model => model.Permissions) //here model is a UserModel
    

    这样您可以避免在您的 AssignPermission 视图中出现 foreach 循环,并且您可以在另一个视图中重复使用任何编辑器...(尽管这些非常具体)

    注意:使用显示模板而不是编辑器模板来显示用户信息会更合适,因为您不会在此视图中编辑任何用户,请查看:ASP.NET MVC 3 - Partial vs Display Template vs Editor Template

    【讨论】:

      【解决方案2】:

      您应该在视图模型中创建一个用户列表。用户应该是一个类,您可以在其中创建一个作为权限级别列表的属性,因此在您的视图中,您可以这样调用:

      <ul>
          foreach(var user in Model.Users)
          {
            <li> user.FirstName...
             <ul>
              foreach(var permissions in user.Permissions)
              {
               <li> permission.SomeProperty </li>
               }
             </ul>
            </li>
          }
      </ul>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-23
        • 2020-06-17
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 2017-03-26
        • 2012-05-09
        • 1970-01-01
        相关资源
        最近更新 更多