传递一组模型项以进行查看

时间:2013-07-16 08:42:37

标签: asp.net-mvc-4

我有一个控制器

 public ActionResult UsersInRoles()
    {           
        using (var ctx1 = new UsersModel())
        {
            var model = new UsersInRolesViewModel();
            model.UserProfiles = ctx1.UserProfiles.ToList();
            model.UserRoles = ctx1.UserRoles.ToList();
            return View(model);
        }            
    }

我将这两个模型传递到我的视图: UserRoles包含系统中所有可能的角色。现在我需要在我的控制器中获取用户注册的所有角色的数组,并将其传递给我查看,这样我就可以知道不会在用户所在的一组可用角色中显示角色已经注册。

我该怎么做?

我看到两个选项:

如何使用linq语句一次尝试获取数据, 要么 要通过用户注册的角色和角色数组传递完整的角色模型,然后我能够在视图中显示任何一个或等等?

与Usermodel相关的AUX类:

 public class UsersModel : DbContext
{
    public UsersModel()
        : base("name=UsersConnection")
    {}
    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<Roles> UserRoles { get; set; }
    public DbSet<UsersInRoles> UsersInUserRoles { get; set; }
}

  public class UsersInRolesViewModel
{
    public IList<UserProfile> UserProfiles { get; set; }
    public IList<Roles> UserRoles { get; set; }
    public IList<ut_GMUTempData> GMUTempData { get; set; }
}

2 个答案:

答案 0 :(得分:0)

这是一个反复出现的问题。

看看我的回答to this SO question: Getting values of check-box from formcollection in asp.net mvc

如果还不够清楚,请发表评论。

答案 1 :(得分:0)

如果您只需要登录用户的角色并使用Internet Application模板的默认简单成员资格,则根本不需要模型绑定。您可以在视图中检索已登录用户的角色,如下所示:

@{
    // r will be a string[] array that contains all roles of the current user.
    var r = Roles.GetRolesForUser();         
}

如果您想要检索任何其他用户的角色,只需将用户名放入该方法:

@{
    // r will be a string[] array that contains all roles of the entered username.
    var r = Roles.GetRolesForUser("username"); 
}

在这种情况下,您只需要将用户名发送给您的模型。

<强>更新

如果您有UserID,则可以按以下方式检索用户名:

@{
    SimpleMembershipProvider provider = new SimpleMembershipProvider();
    string uname = provider.GetUserNameFromId(id);

    // r will be a string[] array that contains all roles of the entered username.
    var r = Roles.GetRolesForUser(uname); 
}