Asp. Net Core MVC Как передать ModelState через RediretToAction? - PullRequest
0 голосов
/ 07 мая 2020

Я хочу перенаправить мой метод входа в систему Post обратно на страницу индекса (страница индекса имеет форму входа и регистрации), но с состоянием модели, чтобы я мог показать ошибки, если вход не удался.

I have Прочитал несколько статей об этом, но они либо устарели, либо не соответствуют ядру asp. net. Я не могу найти решение. Я пытался сохранить ViewData или ModelState в TempData, но это не сработало.

        [AllowAnonymous]
        [HttpGet]
        public IActionResult Index()
        {
           //How to access have the modelstate from SignIn here?

            return View();
        }


        [AllowAnonymous]
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Index(SignInModel model)
        {
            if (ModelState.IsValid)
            {
              ....
              return RedirectToAction("","");
            }

            // here i need to save the modelstate

            return RedirectToAction(nameof(Index));
        }

Ответы [ 3 ]

0 голосов
/ 08 мая 2020

Вы можете сохранить ошибку проверки ModelState в TempData и получить ее в методе входа в систему, чтобы отобразить эту ошибку

0 голосов
/ 08 мая 2020

вы должны ввести signmanager как службу в configure для входа в систему

                var result = await signInManager.PasswordSignInAsync(
                    model.Email, model.Password, model.RememberMe, true);

Это обработает процесс подписи пользователя через ваше приложение.

0 голосов
/ 07 мая 2020

Не пытайтесь передать ModelState как есть, ASP. NET заменит его. Но можно передать все, что угодно. Метод индексации должен поддерживать состояние как параметр:

public IActionResult Index(bool? IsValidAuth = null)
{
    if(IsValidAuth!=true) {} // do something
}

Затем вы можете передать состояние во втором параметре RedirectToAction:

public async Task<IActionResult> Index(SignInModel model)
{
    // ...
    return RedirectToAction(nameof(Index), new {IsValidAuth = false});
}
...