在我的应用程序中,我有一个管理员角色,这些类型的用户可以更改用户(客户端,经理......)的角色.我正在使用内置的会员提供商.这是我试图做的......
[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");
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到了这个错误..
"UsersInRole"类型的对象的成员"RoleId"的值已更改.无法更改定义对象标识的成员.考虑添加具有新标识的新对象并删除现有标识.
我被困了.有任何想法吗?
您可以使用操作代码中提供的,和静态类User,而不是尝试直接从db(datacontext)访问成员资格表.RolesMembership
像这样:
System.Web.Security.Roles.AddUserToRole(usernameID, choosenRole);
Run Code Online (Sandbox Code Playgroud)
假设您的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");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8679 次 |
| 最近记录: |