У меня есть простая форма входа в систему с одним полем ввода, например:
<form asp-action="SendLoginEmail" method="post">
<div class="row">
<input asp-for="EmailAddress" placeholder="Adresse mail" class="form-control"/>
<div class="row">
<span asp-validation-for="EmailAddress"></span>
@if (Model != null && !string.IsNullOrWhiteSpace(Model.ErrorMessage))
{
<span class="field-validation-error">@Model.ErrorMessage</span>
}
</div>
</div>
<div class="row">
<button type="submit" id="login-button" class="challenge-action-item green-action-button link-button">Continuer</button>
</div>
</form>
Вот контроллеры:
[HttpGet("login")]
[AllowAnonymous]
public IActionResult LoginGet(LoginModel model)
{
return View(model);
}
[HttpPost("login")]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> LoginPost(LoginModel model)
{
if (!ModelState.IsValid)
{
return View("Login", model);
}
...
}
[HttpPost("login")]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Whatever(LoginModel model)
{
var error = "The one time login link has expired";
return RedirectToAction("Login", new LoginModel() {ErrorMessage = error});
}
Помимо ошибок валидации, я также заполняю сообщение ErrorMessage из модели, чтобы сообщить пользователю о потенциальных ошибках на стороне сервера, таких как (адрес электронной почты не распознан, истек срок действия ссылки для входа в систему (из-за перенаправления) и т. Д. ...)
Так что без этих дополнительных ошибок я мог бы просто удалить аргумент LoginModel из контроллера Get Login, и он работал бы хорошо. Но так как я хочу передать пользовательские сообщения поверх проверки, мне нужен аргумент модели. Но, в свою очередь, это означает, что даже когда я загружаю страницу без чего-либо, на ней будет отображаться ошибка проверки (в данном случае требуется электронная почта).
Какие у меня варианты?