Вам необходимо использовать компонент представления:
public class LoginViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
var model = await GetModelAsync();
return View(model);
}
public Task<LoginViewModel> GetModelAsync() =>
Task.FromResult(new LoginViewModel());
}
Затем создайте представление Views\Shared\Components\Login\Default.cshtml
и добавьте туда свой код формы входа.Наконец, в вашем макете, где вы хотите, чтобы форма входа была:
@await Component.InvokeAsync("Login")
Вам понадобится страница или обработчик, который может ответить на сообщение формы.Вы не можете публиковать в компоненте просмотра;это просто рендеринг частичного представления с его собственной моделью автономным способом, который может быть вставлен. У вас должен быть скрытый ввод в вашей форме входа в систему для «обратного URL», который вы заполните Request.Path
.Затем при успешном входе вы перенаправляете пользователя обратно на этот URL.Таким образом, вход в систему будет бесперебойным, как если бы они никогда не позволяли странице, на которой они находились.
В случае сбоя вы должны просто повторно отобразить форму входа в систему, как обычно.Проще и проще передать это как представление.Таким образом, вы можете воспользоваться встроенным обработчиком сообщений на странице входа.Опять же, просто добавьте поле обратного URL-адреса и заполните его обратным URL-адресом из запроса, чтобы в конечном итоге пользователь вернулся на страницу, на которой он изначально находился, при запуске процесса входа в систему.