2009-05-06 3 views
6

私のアプリケーションでは私は管理者の役割を持っており、この種のユーザーはユーザー(クライアント、マネージャー...)の役割を変更することができます。私は組み込みのメンバーシッププロバイダを使用しています。ここでASP .NET MVC:ユーザーの役割を変更するにはどうすればよいですか?

は型のオブジェクトのメンバー「RoleId」の価値..私はこのエラーを得た、私は...

 [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

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

は、あなたのusernameIDは、変更したいユーザーの文字列キーであるとchoosenRoleは、あなたがにユーザーを追加したい役割名のキーが含まれていると仮定すると、組み込みのメンバーシッププロバイダを使用しているのか、ユーザー/役割を自分で管理していますか? –

+0

ありがとう私はすでにそれを編集しました – wallyqs

答えて

9

むしろあなたがそこにあなたの行動のコード内で提供UserRoles、およびMembership静的クラスを使用する必要がありますデシベル(DataContextの)から直接メンバーシップのテーブルにアクセスしようとしているよりも。このよう

[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

申し訳ありませんが、私はそれを取得していません。コメントありがとう。 – wallyqs

+0

ありがとう!私はこれについて知らなかった。それはそれをした! – wallyqs

0

UsersInRole.RoleIdUsersInRoleテーブルの主キーの一部であり、したがって変更することはできません。エラーメッセージで示された提案に従い、既存のUsersInRoleインスタンスを削除して新しいインスタンスを作成する必要があります。

+0

それは不可能で、ユーザーのメンバーシップを再構築する必要がありますか? – wallyqs

+0

はい、できません。したがって、新しいUsersInRoleインスタンスを削除して作成するか、cottsakの提案に従ってください(Membershipクラスを使用してください)。 –

関連する問題