2

我有一个控制器

 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; }
}
4

2 回答 2

0

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

看看我对这个 SO 问题的回答:Getting values of check-box from formcollection in asp.net mvc

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

于 2013-07-16T09:45:27.010 回答
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); 
}
于 2013-07-19T08:52:59.723 回答