asp.net mvc: как расширить контроллер аккаунта?

У меня есть приложение asp.net mvc, которое использует стандартный контроллер учетной записи для обработки аутентификации. Клиент попросил меня добавить новые поля, такие как адрес электронной почты, город, возраст для создания учетной записи. Какой будет лучший способ расширить контроллер аккаунта / модель? Должен ли я изменить таблицу aspnet_users или я должен создать новую таблицу с новыми полями? Это правильный способ добавить новые поля в AccountFormViewModel?

3 ответа

Я думаю, у вас есть два варианта:

1) Создание собственного провайдера членства.

2) Использование встроенного профиля участника членства

В любом случае вам нужно реализовать / расширить AccountController и ViewModel, которые вы получаете с новым проектом MVC. Если вы выберете первый вариант, вы можете добавить свои поля в таблицу aspenet_users. Если вы выбираете второй вариант, вы используете таблицу профилей, которую фреймворк хочет создать.

Если вы хотите "суперинтеграции" ваших полей, вы можете рассмотреть возможность расширения интерфейсов IIdentity и IPrincipal. Посмотрите на этот ответ для получения дополнительной информации.

Надеюсь, поможет

Ниже приведена ссылка на аналогичный пост по расширению контроллера аккаунта.

Расширение AccountController: членство в ASP.Net MVC

Сначала вы должны изменить RegisterModel AcountModels и добавить новые поля

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 вы изменяете действие Register

 [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);
    }
Другие вопросы по тегам