C'est parce que vous envoyez des messages le de l'action de l'indice alors que vous devriez l'afficher à l'action LogOn , où votre logique d'authentification est activée.
Essayez de changer Html.BeginForm()
à Html.BeginForm("LogOn", "HomeController")
à votre avis. Vous avez présenté le formulaire à partir de l'action Index
de HomeController
. Et en le renvoyant à la même action du même contrôleur. Mais cette action ne traitait pas la logique d'authentification. Voilà pourquoi rien ne se passait et vous n'étiez pas vous connecter
Dans le défaut ASP.NET MVC 2 site, mais ils présentent la forme de l'action de LogOn
AccountController
.
public ActionResult LogOn() {
return View(); //returns the LogOn.aspx view
}
Alors Lorsqu'ils utilisent Html.BeginForm()
dans la vue, ils créent un formulaire POST à la même action du même contrôleur. Alors ils créent une autre action avec le nom LogOn
:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl) {
//...
}
Mais cette fois-ci, ils décorent cette action avec l'attribut HttpPost
. Cela signifie que si une demande atteint l'action LogOn
de avec le verbe POST, cette méthode ci-dessus sera exécutée. Mais si la même action est demandée avec le verbe GET (c'est-à-dire sans un corps POST), l'autre méthode sera exécutée.
Donc, fondamentalement, vous auriez pu faire cela dans votre HomeController
:
public ActionResult Index() {
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View(); //returns the view which has the form
}
[HttpPost]
public ActionResult Index(LogOnModel model, string returnUrl) {
//handles the post
}
Mais votre action (celui qui était censé gérer la logique d'authentification) a été nommé différemment. Et c'est pourquoi nous avions besoin de définir explicitement le contrôleur et le nom de l'action dans le Html.BeginForm("LogOn", "HomeController")
.
c'était tout! Pouvez-vous me dire pourquoi, dans le formulaire LogOn, il n'était pas nécessaire que ce soit ainsi? Voici le code du contrôleur de connexion asp.net mvc standard et voir que j'ai copié à partir de: http://pastebin.com/xkLuazSi –
@Jason Shultz, Lorsque vous définissez un formulaire avec 'Html.BeginForm()' il définit le formulaire attribut d'action à l'itinéraire actuel. La vue LogOn n'a donc pas besoin de définir explicitement le contrôleur et l'action car elle doit envoyer le formulaire au même contrôleur et à la même ** action **, mais avec la méthode POST. J'espère que cela à du sens. –
Je comprends ce que vous dites, j'ai juste du mal à voir la différence entre/home/index et/accounts/logon. à mon oeil non averti, je ne vois pas la différence. –