После проверки кода я обнаружил несколько проблем.
1. У меня есть сомнения по поводу вашего метода записи AccountChange
.Следующие соглашения должны соблюдаться.Согласно документам Microsoft о бритвенных страницах, генерируется несколько обработчиков методов по умолчанию, например: OnGet
OnPost
OnGetAsync
OnPostAsync
и т. Д.
Однако, если вы хотите использовать пользовательский обработчикname , оно также должно следовать некоторому соглашению об именах.
Метод должен начинаться с OnPost[Get,...]<Handlername>[Async|NoAsync](its optional)
.
Таким образом, ваш метод должен быть назван как OnPostAccountChangeAsync()
Если вы определите такой метод, выдолжен сказать представлению, что вы хотите использовать указанный обработчик.Вы говорите это с помощью директивы asp-page-handler
, поэтому ваша форма должна выглядеть следующим образом:
<form id="change-password-form" method="post">
//...
<button type="submit" class="btn btn-default" asp-page-handler="AccountChange">Submit</button>
</form>
2. Вы связываете свою собственность Input
[BindProperty]
public InputModel Input { get; set; }
Однако в вашем методе OnPostAccountChangeAsync()
вы пытаетесь получить доступ к экземпляру параметра типа UserModel
, который будет нулевым.Это не связано.В хорошем случае вы получите нулевое исключение.В плохом вы обновите вашу сущность с нулевыми свойствами.Таким образом, ваш метод OnPostAccountChangeAsync()
должен принимать в экземпляре параметра InputModel
, или вы можете получить доступ к этому свойству непосредственно внутри тела метода (вы можете избавиться от параметра)
OnPostAccountChangeAsync(InputModel Input)
{
//...
}
3. Небольшая вещь, однако, она улучшает читабельность вашего кода.Пожалуйста, будьте последовательны в именовании ваших переменных.Согласованность делает лучшую ориентацию в вашем коде.В Csharp свойства должны начинаться с заглавной буквы (PascalCasing) .Не стесняйтесь, и проверьте C # соглашение об именах
На ваш вопрос о UserManager в разделе комментариев:
Вы можете посмотреть на Identity
какОболочка (точнее сказать API) , которая предоставляет полезные методы для управления пользователями, кроме того, что она предлагает другие вещи.Как я уже сказал, если вы посмотрите на зависимости вашего пакета, вы можете заметить, что Entity Framework
поставляется в пакете Identity
nuget.Что это значит?Это открывает вам возможность не зависеть только от каких-то «таинственных» Identity
.Вы можете явно использовать Entity Framework
, например, для сохранения нового пользователя в таблицу AspNetUsers.Четко сказано, вы не ограничены.Однако, если вы уже используете Identity, лучше использовать доступные методы.