2013-07-16 63 views
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); 
     }    
    } 

我通过传递这两个型号的我的看法: 包含的UserRole系统中所有可能我的角色。现在我需要在我的控制器中获得一个用户注册的所有角色的数组,并将其传递给我,以便我可以知道不显示用户所在的可用角色框中的角色已经注册。

我该怎么做?

我看到两个选项:

一些如何使用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; } 
} 

回答

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"); 
} 

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

更新:

如果你有用户ID,您可以检索用户名,如下所示:

@{ 
    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); 
} 
+0

我需要使用第二个选项,但使用用户ID而不是用户名作为用户id是主键。 – Zapnologica

+0

我更新了我的答案以满足您的需求。 – AminSaghi