добавление дополнительных полей в регистрационную форму, используя членство в MySql и MVC 3 - PullRequest
6 голосов
/ 03 декабря 2011

Я создал сайт на основе asp.net MVC 3 и MySql. Я получил членство для работы с коннектором MySQL .NET, так что с приложением по умолчанию вы получаете новый проект MVC 3, у меня есть рабочая форма регистра ирабочая форма входа

но ... как мне добавить больше полей в форму регистрации?я знаю, как добавить их в свою модель и на страницу ... но как мне сделать так, чтобы членство не дало пользователю получить новые данные?я должен буду сделать колонки в базе данных самостоятельно?или членство знает как их автоматически каким-то образом создавать?

я хочу только 3 поля для регистрации ...

спасибо

Ответы [ 3 ]

10 голосов
/ 04 декабря 2011

взгляните на ваш файл AccountModels.cs.Он содержит

public class RegisterModel
{ 
   // User name, Email Adress, Password, Password confirmation already there

   // you can add something like below
    [Required]
    [Display(Name = "Nickname")]
    public string Nickname { get; set; }
}

Как только у вас появится новое свойство в вашей модели, вам нужно обновить представление.В Views> Аккаунт> Register.cshtml вы должны добавить

        <div class="editor-label">
            @Html.LabelFor(m => m.Nickname )
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.Nickname )
            @Html.ValidationMessageFor(m => m.Nickname )
        </div>

Когда вы закончите с этим, вам нужно обновить логику регистрации, чтобы использовать ваше новое свойство.Перейдите в AccountController и найдите

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

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
              //
              // this would be a good place for you to put your code to do something with model.Nickname
              //                    
              return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

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

Если вы хотите сохранить эту информацию в профиле пользователей ASP.NET, вам нужно это в Web.config

<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
  <properties>
    <add name="Nickname" defaultValue="False" type="System.String" />
  </properties>
</profile>

Затем в вашем коде - выможете сделать

var userProfile = ProfileBase.Create(model.UserName);

, чтобы получить / установить ваши свойства в Профиле

8 голосов
/ 06 декабря 2011

Я предлагаю вам это решение.

  1. Создать таблицу с именем UserDetails
  2. Добавить поле, которое указывает на UserId

Вы сделали.

Теперь вам нужен некоторый класс для извлечения этих полей на основе UserId. Вы также можете реализовать собственный MembershipProvider и добавить метод, подобный GetUserDetail(), который возвращает объект, содержащий ваши дополнительные поля.

Это основано на официальной статье ASP.NET: http://www.asp.net/web-forms/tutorials/security/membership/storing-additional-user-information-cs

0 голосов
/ 27 августа 2016

Предположим, вы хотите создать поля для возраста и пола. Прежде всего, вы можете создать пользовательский интерфейс для регистрации в соответствующем окне «Регистрация». это означает создание полей ввода для возраста и пола. затем в AccountController перейдите в представление «Регистрация» и добавьте поля «Возраст» и «Пол» в объекте ApplicationUser (который уже объявлен). И вот, пожалуйста.

Подробную информацию об этом можно найти http://blog.falafel.com/customize-mvc-5-application-users-using-asp-net-identity-2-0/

...