Подтвердить что ты не робот

Как добавить дополнительное поле с помощью поставщика членства ASP.Net?

У меня есть базовое приложение, использующее поставщика членства ASP.NET. По умолчанию вы можете использовать несколько полей, таких как имя пользователя, пароль, помните меня.

Как добавить к поставщику членства asp.net, чтобы я мог добавить дополнительный "адрес" поля в разделе реестра и сохранить его в базе данных?

В настоящее время я вижу следующее при создании пользователя в модели учетной записи:

public MembershipCreateStatus CreateUser(string userName, string password,
   string email)
{
   if (String.IsNullOrEmpty(userName))
   { throw new ArgumentException("Value cannot be null or empty.", "userName"); }
   if (String.IsNullOrEmpty(password))
   { throw new ArgumentException("Value cannot be null or empty.", "password"); }
   if (String.IsNullOrEmpty(email))
   { throw new ArgumentException("Value cannot be null or empty.", "email"); }

   MembershipCreateStatus status;
   _provider.CreateUser(userName, password, email, null, null, true,
       null, out status);

   return status;
}

В созданной пользовательской функции я также хочу сохранить "адрес" пользователя.

В register.aspx я добавил следующее:

<div class="editor-label">
    <%: Html.LabelFor(m => m.Address) %>
</div>
<div class="editor-field">
    <%: Html.TextAreaFor(m => m.Address) %>
</div>

Любые идеи?

4b9b3361

Ответ 1

Как отмечалось в jwsample, вы можете использовать Провайдер профилей для этого.

В качестве альтернативы вы можете создать свою собственную таблицу (таблицы), которая хранит дополнительную информацию, связанную с пользователем. Это немного больше работы, так как вы на крючке для создания собственных таблиц и создания кода для получения и сохранения данных в этих таблицах и из них, но я считаю, что использование пользовательских таблиц таким образом позволяет повысить гибкость и удобство обслуживания чем поставщик профилей (в частности, поставщик профилей по умолчанию, SqlProfileProvider, который хранит данные профиля неэффективно, денормализованно).

Взгляните на этот учебник, где я просматриваю этот процесс: Хранение дополнительной информации пользователя.

Ответ 2

Вы хотите использовать Провайдер Профайла для этого, для чего он предназначен. Если вы измените поставщика членства, чтобы добавить дополнительное поле, он нарушит контракт поставщика, и вы не сможете переключиться на другой в будущем.

Вот провайдер профиля: http://msdn.microsoft.com/en-us/library/2y3fs9xs.aspx
Дополнительная информация: http://msdn.microsoft.com/en-us/library/014bec1k.aspx

Если вы используете провайдер членства sql, то, возможно, у вас есть все структуры таблиц для поддержки поставщика профилей.

Ответ 3

Чтобы добавить новый столбец с именем "Адрес":

Шаг 1: Модели /IdentityModels.cs

Добавьте следующий код в класс "ApplicationUser":

public string Address{ get; set; }

Шаг 2: Модели /AccountViewModels.cs

Добавьте следующий код в класс "RegisterViewModel":

public string Address{ get; set; }

Шаг 3: Views/Register.cshtml

Добавить текстовое поле ввода адреса в представление:

<div class="form-group">
        @Html.LabelFor(m => m.Address, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.Address, new { @class = "form-control" })
        </div>
</div>

Шаг 4:

Перейдите в Инструменты > Диспетчер NuGet > Консоль диспетчера пакетов

  Шаг A: Введите "Enable-Migrations" и нажмите клавишу ввода
  Шаг B: Введите адрес "Add-Migration" "и нажмите клавишу ввода
  Шаг C: Введите" Обновить базу данных" и нажмите Enter

то есть

PM> Enable-Migrations
PM> Add-Migration "Address"
PM> Update-Database

Шаг 5: Контроллеры /AccountController.cs

Перейдите в "Действие регистрации" и добавьте "Address = model.Address" в ApplicationUser то есть

 var user = new ApplicationUser { UserName = model.Email, Email = model.Email, Address= model.Address}