asp.net mvc:如何扩展帐户控制器?

时间:2011-09-20 07:31:10

标签: asp.net-mvc

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

3 个答案:

答案 0 :(得分:1)

我猜你有两个选择:

1)创建custom membership provider

2)使用内置profile membership provider

无论如何,您必须实现/扩展您使用新MVC项目获得的AccountController和ViewModel。 如果选择第一个选项,则可以将字段添加到aspenet_users表中。 如果选择第二个选项,则使用框架希望您创建的配置文件表。

如果您想要字段的“超级集成”,可以考虑扩展IIdentityIPrincipal接口。请查看this answer以获取更多信息。

希望有所帮助

答案 1 :(得分:1)

以下是扩展帐户控制器的类似帖子的链接。

Extending AccountController: ASP.Net MVC Membership

答案 2 :(得分:0)

首先,您修改了RegisterModel帐户模型,然后添加新字段

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


}
在AccountController中

修改注册操作

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