@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);
форма у вас содержит поле для вывода ошибки валидации
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
DANYCOM Краснодар
от 140 000 до 200 000 руб.
Аппекс Москва
от 100 000 до 220 000 руб.
от 70 000 до 140 000 руб.