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)); }
3 Réponses :
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 }
Merci pour votre réponse. Je suppose qu'avec cette approche, le tag asp-validation-for ne fonctionnera plus.
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
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.