2010-08-08 3 views
10

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

Есть идеи?

ответ

9

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

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

Посмотрите на этот учебник, где я просматриваю этот процесс: Storing Additional User Information.

3

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

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

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

2

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

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

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

public string Address{ get; set; } 

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

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

public string Address{ get; set; } 

Шаг 3: просмотров/Регистрация.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-Миграции »И нажмите enter
Шаг B: Введите адрес« Add-Migration »« »и нажмите enter
Шаг C: Введите« Обновить базу данных »и p ССГ введите

т.е.

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} 
+0

Отличное решение, сэкономить много хлопот. Спасибо. Не могли бы вы объяснить шаг 4. Для меня '.Net' создал несколько классов в папке« Migrations », что это? что произойдет, если я опубликую проект? –

+1

Вы можете обратиться к https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-entity-framework-scaffolding-and-migrations для Детали –

Смежные вопросы