2012-04-21 5 views
3

私はASP.NET MVCはユーザー作成時にuserIdを取得しますか?

[AllowAnonymous] 
    [HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      MembershipCreateStatus createStatus; 
      Membership.CreateUser(model.UserName, model.Password, model.Email, passwordQuestion: null, passwordAnswer: null, isApproved: true, providerUserKey: null, status: out createStatus); 

      if (createStatus == MembershipCreateStatus.Success) 
      { 
       FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false); 
       //Object reference not set to an instance of an object. 
       Guid id = (Guid)System.Web.Security.Membership.GetUser().ProviderUserKey; 
       System.Web.Security.Roles.AddUserToRole(model.UserName, "User"); 
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       ModelState.AddModelError("", ErrorCodeToString(createStatus)); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

を登録するときにユーザーIDを取得したいが、エラー(「オブジェクトのインスタンスに設定されていないオブジェクト参照を。」)が発生。どのように登録メソッドでuserIdを取得できますか?

ありがとうございました。

+0

を? – Xharze

+0

私はコメント行でそれをマークしました。 –

+0

"FormsAuthentication.SetAuthCookie ..."の後 –

答えて

5

FormsAuthentication.SetAuthCookieの要求を認証し、同じリクエストに応じてSystem.Web.Security.Membership.GetUser()がnullを返します。CookiesSupportedがfalseの場合

SetAuthCookie方法は クッキーコレクションまたはURLのいずれかにフォーム認証チケットを追加します。 フォーム認証チケットは、フォーム認証情報 をブラウザからの次の要求に提供します。フォーム認証で ユーザーを認証し、リダイレクトを使用したナビゲーションの制御を保持する場合は、SetAuthCookieメソッドを使用できます。

Membership.CreateUserあなたはこの行うことができるはずので、作成したユーザーを返す:あなたは例外を取得しないとき

[AllowAnonymous] 
[HttpPost] 
public ActionResult Register(RegisterModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // Attempt to register the user 
     MembershipCreateStatus createStatus; 
     MembershipUser membershipUser = Membership.CreateUser(model.UserName, model.Password, model.Email, passwordQuestion: null, passwordAnswer: null, isApproved: true, providerUserKey: null, status: out createStatus); 

     if (createStatus == MembershipCreateStatus.Success) 
     { 
      FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false); 
      Guid id = (Guid)membershipUser.ProviderUserKey; 
      ... 
+0

ありがとうあなたの素晴らしい答え。 –