@s0tnikow

Как правильно принять ответ от webapi post запроса?

Привет! Есть форма для авторизации, лежит в /home/Login.cshtml
<form id="register-form" asp-action="Login" asp-controller="Account" asp-anti-forgery="true">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <input asp-for="Email" class="form-control" autocomplete="off" />
                    <span asp-validation-for="Email" class="text-danger"></span>
                    <label asp-for="Email" class="control-label"></label>
                </div>
                <div class="form-group">
                    <input asp-for="Password" class="form-control" autocomplete="off" />
                    <span asp-validation-for="Password" class="text-danger"></span>
                    <label asp-for="Password" class="control-label"></label>
                </div>
                
                
                <div class="row mt-3">
                    <div class="form-group col">
                        <input type="submit" value="Sign in" class="btn btn-outline-primary float-right" />
                    </div>
                </div>
                <div class="row bottom-loginregister">
                    Do not have an account? Go to&nbsp; <a asp-action="Register" asp-controller="Home"> Sign up </a> &nbsp;page.
                </div>
            </form>

Она прекрасно работает потому что к ней не прикасались мои пальцы.

Вот кусок кода авторизации:
[HttpPost]
        [ValidateAntiForgeryToken]
        [ActionName("Login")]
        public async Task<IActionResult> Login([FromForm] LoginModel model)
        {
            if (ModelState.IsValid)
            {
                Users user = await db.Users.FirstOrDefaultAsync(u => u.Email == model.Email && u.Password == model.Password);
                if (user != null)
                {
                    await Authenticate(model.Email);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", "Неправильный логин и (или) пароль");
                    return RedirectToAction("Login", "Home");
                }
            }
            return View(model);
        }

public IActionResult Login()
        {
            return View();
        }

private async Task Authenticate(string userName)
        {
            var claims = new List<Claim>
            {
                new Claim(ClaimsIdentity.DefaultNameClaimType, userName)
            };
            ClaimsIdentity id = new ClaimsIdentity(claims, "ApplicationCookie", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
            await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(id));
        }


Суть вопроса в строке
ModelState.AddModelError("", "Неправильный логин и (или) пароль");

Как я могу это сообщение отобразить на своей форме Login.cshtml?
У меня страница рефрешится благодаря
return RedirectToAction("Login", "Home");
Но я хочу не рефрешить ее, а что бы мне это сообщение в какой-нибудь div выводился. Я не понимаю как мне получить тот текст, что я передал в Modelstate? Может у кого примеры есть?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
hePPer
@hePPer
У меня страница рефрешится благодаря
return RedirectToAction("Login", "Home");


замените
return RedirectToAction("Login", "Home");
на
return View(model);
форма у вас содержит поле для вывода ошибки валидации
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы