Действия по воспроизведению проблемы с использованием версии Visual Studio 17.9.0 Community с .NET SDK v8.0.201:
- Создайте новое приложение Blazor Wep с .NET 8, отдельными учетными записями, режимом интерактивной визуализации: сервер, расположением интерактивности: глобальным.
- Изменить строка подключения в /appsettings.json, если необходимо. Моя выглядит так:
Код: Выделить всё
"ConnectionStrings": {
"DefaultConnection": "Server=localhost\\SQLEXPRESS; Database=ExtendedUserPropertiesDemo2; Trusted_Connection=True; MultipleActiveResultSets=true; TrustServerCertificate=true;"
},
- С помощью консоли управления пакетами (PMC) примените шаблонную первоначальную миграцию и создайте базу данных, запустив
- Откройте /Data/ApplicationUser.cs и добавьте новые свойства:
Код: Выделить всё
public class ApplicationUser : IdentityUser { public string FirstName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty; } - В PMC создайте новую миграцию, выполнив:
- Обновите базу данных еще раз:
- Откройте страницу управления пользователями (/ Components/Account/Pages/Manage/Index.razor)
- В модели ввода в нижней части файла добавьте те же свойства, которые мы добавили в модель ApplicationUser, поэтому это выглядит так это:
Код: Выделить всё
private sealed class InputModel
{
[Phone]
[Display(Name = "Phone number")]
public string? PhoneNumber { get; set; }
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
}
- Обновите форму, включив в нее поля формы для новых свойств:
Код: Выделить всё
First Name
Last Name
- В OnInitializedAsync() добавьте:
Код: Выделить всё
Input.FirstName = user.FirstName;
Input.LastName = user.LastName;
Код: Выделить всё
OnInitializedAsync()Код: Выделить всё
protected override async Task OnInitializedAsync()
{
user = await UserAccessor.GetRequiredUserAsync(HttpContext);
username = await UserManager.GetUserNameAsync(user);
phoneNumber = await UserManager.GetPhoneNumberAsync(user);
Input.PhoneNumber ??= phoneNumber;
Input.FirstName = user.FirstName;
Input.LastName = user.LastName;
}
- В OnValidSubmitAsync() добавьте:
Код: Выделить всё
user.FirstName = Input.FirstName;
user.LastName = Input.LastName;
await UserManager.UpdateAsync(user);
Код: Выделить всё
OnValidSubmitAsync()Код: Выделить всё
private async Task OnValidSubmitAsync()
{
if (Input.PhoneNumber != phoneNumber)
{
var setPhoneResult = await UserManager.SetPhoneNumberAsync(user, Input.PhoneNumber);
if (!setPhoneResult.Succeeded)
{
RedirectManager.RedirectToCurrentPageWithStatus("Error: Failed to set phone number.", HttpContext);
}
}
user.FirstName = Input.FirstName;
user.LastName = Input.LastName;
await UserManager.UpdateAsync(user);
await SignInManager.RefreshSignInAsync(user);
RedirectManager.RedirectToCurrentPageWithStatus("Your profile has been updated", HttpContext);
}
- Запустите приложение.
- Зарегистрируйте пользователя и подтвердите учетную запись.
- Войдите в систему и получите доступ к странице управления пользователями (/Account/Manage), щелкнув в меню свой зарегистрированный адрес электронной почты.
- Введите данные в поле FirstName. Поля формы , LastName и PhoneNumber. Нажмите «Сохранить».
- Обратите внимание, что номер телефона сохраняется, а имена — нет.
Подробнее здесь: https://stackoverflow.com/questions/780 ... zor-server
Мобильная версия