2009-05-06 29 views
6

在我的应用程序中,我有一个管理员角色,并且这类用户可以更改用户(客户端,经理...)的角色。我正在使用内置的成员资格提供程序。这里是我试图做...ASP.NET .NET MVC:我如何改变用户的角色?

 [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult EditRole(string usernameID, FormCollection formValues) 
    { 

     var db = new AppDataContext(); 
     var user = db.Users.SingleOrDefault(d => d.UserName == usernameID); 
     string choosenRole = Request.Form["Roles"];        

     var tuple = db.UsersInRoles.SingleOrDefault(d => d.UserId == user.UserId); 
     var roleNameID = db.Roles.SingleOrDefault(d => d.RoleName == choosenRole).RoleId; 
     tuple.RoleId = roleNameID; 

     db.SubmitChanges(); 

     return RedirectToAction("Index"); 
    } 

但是,我得到这个错误..型“UsersInRole”的对象的

价值成员的“角色ID”改变。 定义对象身份的成员无法更改。 考虑添加一个具有新身份的新对象,并删除现有的对象。

我被困住了。有任何想法吗?

+0

您是使用内置的会员提供商还是自己管理用户/角色? – 2009-05-06 18:42:06

+0

谢谢我已经编辑它 – wallyqs 2009-05-06 18:45:11

回答

9

与其试图直接从db(datacontext)访问成员表,您应该使用您的操作代码中提供的User,RolesMembership静态类。

像这样:

System.Web.Security.Roles.AddUserToRole(usernameID, choosenRole); 

假设你usernameID是要改变和choosenRole包含要将该用户添加到角色名关键用户的字符串键:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult EditRole(string usernameID, FormCollection formValues) 
{ 
    string choosenRole = Request.Form["Roles"];        
    System.Web.Security.Roles.AddUserToRole(usernameID, choosenRole); 

    return RedirectToAction("Index"); 
} 
0

UsersInRole.RoleIdUsersInRole表的主键的一部分,因此不能更改。您应该按照错误消息给出的建议并删除现有的UsersInRole实例并创建一个新实例。

+0

所以这是不可能的,我必须重建用户的会员? – wallyqs 2009-05-06 18:47:27

相关问题