2011-09-20 53 views
1

我有一个asp.net mvc应用程序,它使用标准帐户控制器来处理身份验证。 客户要求我将新字段添加为电子邮件,城市,年龄到帐户创建。 这将是扩展账户控制器/模型的最佳方式? 我应该修改aspnet_users表还是应该用新字段创建一个新表?这是一个正确的方式来添加新的字段AccountFormViewModel?asp.net mvc:如何扩展账户控制器?

回答

1

我想你有两个选择:

1)创建您的custom membership provider

2)使用内置profile membership provider

反正你必须执行/扩展的AccountController和视图模型,你有一个新的MVC项目得到。 如果您选择第一个选项,则可以将字段添加到aspenet_users表。 如果您选择第二个选项,则使用框架希望您创建的配置文件表。

如果你想要一个“超级集成”你的领域,你可以考虑扩展IIdentityIPrincipal接口。查看this answer了解更多信息。

希望它有帮助

0

首先,你必须修改RegisterModel AcountModels,并添加新的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; } 


} 

在AcountController修改注册行为

[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); 
    }