2011-09-20 2 views
1

J'ai une application mvc asp.net qui utilise le contrôleur de compte standard pour gérer auth. Le client m'a demandé d'ajouter de nouveaux champs comme e-mail, ville, âge de création de compte. Quelle serait la meilleure façon d'étendre le contrôleur de compte/modèle? Devrais-je modifier la table aspnet_users ou devrais-je créer une nouvelle table avec les nouveaux champs? Est-ce une bonne façon d'ajouter de nouveaux champs à AccountFormViewModel?asp.net mvc: comment étendre le contrôleur de compte?

Répondre

1

Je suppose que vous avez deux options:

1) Création d'custom membership provider.

2) En utilisant la fonction interne profile membership provider

Quoi qu'il en soit vous devez implémenter/étendre la AccountController et ViewModel que vous obtenez avec un nouveau projet MVC. Si vous choisissez la première option, vous pouvez ajouter vos champs à la table aspenet_users. Si vous choisissez la deuxième option, vous utilisez la table de profil que le framework vous demande de créer.

Si vous voulez une "super intégration" de vos champs, vous pouvez envisager d'étendre les interfaces IIdentity et IPrincipal. Regardez this answer pour plus d'informations.

Hope it helps

0

D'abord, vous avez modifier le RegisterModel AcountModels, et ajouter de nouvelles fileds

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 


} 

en AcountController vous modifiez l'action Registre

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      try 
      { 
       WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 


       WebSecurity.Login(model.UserName, model.Password); 

       using (var context = new ECDB()) 
       { 
        var username = model.UserName; 
        var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username); 
        user.FirstName = model.FirstName; 
        user.LastName = model.LastName; 
        user.Email = model.Email; 
        context.SaveChanges(); 
       } 
       return RedirectToAction("Index", "Home"); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
      } 
     } 

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