2011-06-04 8 views
0

Je souhaite créer un utilisateur dans ma table utilisateur lorsqu'un nouvel utilisateur vient de s'inscrire à l'application ASP.NET MVC (j'utilise le système de journalisation ASP.NET MVC par défaut - Adhésion. nouveau guide de l'utilisateur enregistré et créer l'utilisateur dans ma base de données qui aura le même guid et y garder des données différentes comme le nom de famille, etc Comment puis-je faire? Comment puis-je obtenir l'ID de personne enregistrée? J'essayais de le faire enAdhésion à ASP.NET MVC2 +

public ActionResult Register(RegisterModel model) function in AccountController 

mais je ne sais pas comment obtenir le guid de l'utilisateur vient d'enregistrer ce ne fonctionne pas:

[HttpPost] 
public ActionResult Register(RegisterModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // Attempt to register the user 
     MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); 

     if (createStatus == MembershipCreateStatus.Success) 
     { 
      FormsService.SignIn(model.UserName, false /* createPersistentCookie */); 

      //string guid = Helpers.getLoggedUserGuid(); //return null 

      //if (Request.IsAuthenticated) { } // return false 
      //if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated) {} // return false 
      //Membership.getUser() // return null 
      //The most funny is that after this redirection below the user is logged in - I do not understand it 
      return RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 
    return View(model); 
} 

Est-il possible d'obtenir ce guid dans cette fonction? (Je sais que je peux obtenir userName et ainsi de suite, mais je ne comprends pas pourquoi je ne peux pas obtenir ce guid)

Répondre

1

Vous pouvez obtenir Guid de MembershipUser:

var user = Membership.GetUser(model.Username); 
var guid = (Guid) user.ProviderUserKey; 

MSDN:

La propriété ProviderUserKey expose l'identificateur de l'appartenance source de données tapé comme objet. Le type de l'identificateur dépend du MembershipProvider ou du MembershipUser . Dans le cas du SqlMembershipProvider, le ProviderUserKey peut être validé en tant que Guid, puisque le SqlMembershipProvider stocke l'identificateur d'utilisateur en tant qu'identifiant unique .

+0

Je pensais la même chose mais dans cette fonction il est encore vide et je ne comprends pas pourquoi la redirection est postérieure et après la redirection il y a une valeur dans Membership.GetUser(), il semble qu'elle met à jour cette appartenance tant qu'elle est rediriger ... – canimbenim

+2

GetUser() renvoie l'utilisateur actuellement connecté. Puisque l'utilisateur n'est pas encore créé, il n'est pas connecté. Vous pouvez essayer avec Membership.GetUser (model.Username); – frennky

+0

Wooow, Merci pour ce commentaire frennky - il a résolu mon problème! – canimbenim

1

Vous ne pouvez pas obtenir cette valeur dans la méthode que vous essayez. sauf si vous utilisez le Membership.GetUser()

Ce que vous devrait faire est:

créer un contrôleur commun, par exemple:

public class MainController : Controller 
{ 
    public MembershipUser _user = null; 
    public MembershipUser User { 
     if(_user == null) _user = Membership.GetUser(model.Username); 
     return _user; 
    } 
    public GUID UserGuid { 
     get { return (Guid)User.ProviderUserKey;; } 
    } 
} 

puis, au lieu d'avoir vos contrôleurs dérivé de Controller font les hériteront à partir de votre nouveau contrôleur personnalisé

public class SalesController : MainController 

et dans toute méthode dont vous avez besoin, vous appelez simplement this.User pour contenir le MembershipUser ou this.UserGuid pour obtenir l'ID de l'utilisateur.