Как добавить дополнительное поле с помощью поставщика членства ASP.Net? - PullRequest
11 голосов
/ 08 августа 2010

У меня есть базовое приложение, использующее поставщик членства 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>

Есть идеи?

Ответы [ 3 ]

9 голосов
/ 16 августа 2010

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

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

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

3 голосов
/ 09 августа 2010

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

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

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

2 голосов
/ 22 февраля 2017

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

Шаг 1: Models / IdentityModels.cs

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

public string Address{ get; set; }

Шаг 2: Models / 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» и нажмите enter
Шаг B: Введите «Add-Migration« Address »» инажмите enter
Шаг C: введите «Update-Database» и нажмите enter

т.е.

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

Шаг 5: Controllers / AccountController.cs

Перейдите в поле «Зарегистрировать действие» и добавьте «Address = model.Address» в ApplicationUser, то есть

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