0
votes

Asp.Net Core MVC Comment transférer ModelState via RedirectToAction?

Je veux rediriger ma méthode SignIn Post vers la page d'index (la page d'index contient un formulaire de connexion et d'inscription) mais avec le modèle d'état afin que je puisse afficher les erreurs si la connexion a échoué.

J'ai lu plusieurs articles à ce sujet, mais ils sont soit obsolètes soit non pour le noyau asp.net. Je ne trouve pas de solution. J'ai essayé de stocker ViewData ou ModelState dans TempData mais cela ne fonctionne pas.

        [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));
        }


0 commentaires

3 Réponses :


0
votes

N'essayez pas de transmettre ModelState tel quel, ASP.NET le remplacera. Mais vous pouvez passer n'importe quoi d'autre. Votre méthode d'indexation doit prendre en charge l'état en tant que paramètre:

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

Ensuite, vous pouvez passer l'état dans le deuxième paramètre de RedirectToAction:

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


1 commentaires

Merci pour votre réponse. Je suppose qu'avec cette approche, le tag asp-validation-for ne fonctionnera plus.



0
votes

Vous pouvez stocker votre erreur de validation ModelState sur TempData et vous pourrez l'obtenir sur votre méthode de connexion pour afficher cette erreur


0 commentaires

0
votes

vous devez injecter signmanager en tant que service dans configure pour vous connecter

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

Cela gérera le processus de signature de l'utilisateur via votre application.


0 commentaires