Это потому, что вы публикуете действие from в действии Index, тогда как вы должны отправлять его в действие LogOn, где находится ваша логика аутентификации.
Попробуйте изменить Html.BeginForm()
на Html.BeginForm("LogOn", "HomeController")
на ваш взгляд.
В коде, который вы разместили , вы представляли форму из действия HomeController
s Index
. И отправив его обратно тому же контролеру того же действия. Но это действие не обрабатывало логику аутентификации. Вот почему ничего не происходило, и вы не входили в систему.
Однако на сайте ASP.NET MVC 2 по умолчанию они представляют форму из действия AccountController
LogOn
:
public ActionResult LogOn() {
return View(); //returns the LogOn.aspx view
}
Поэтому, когда они используют Html.BeginForm()
в представлении, он создает форму, которая выполняет POST для того же действия того же контроллера. Поэтому они создают еще одно действие с именем LogOn
:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl) {
//...
}
Но на этот раз они украшают это действие атрибутом HttpPost
. Это означает, что если запрос достигает действия AccountController
LogOn
с глаголом POST , этот метод будет выполнен выше. Но если то же действие запрашивается с глаголом GET (т.е. без тела POST), будет выполнен другой метод.
Так что, в принципе, вы могли бы сделать это в вашем 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
}
Но ваше действие (которое должно было обрабатывать логику аутентификации) было названо по-другому. И именно поэтому нам нужно было явно установить контроллер и имя действия в Html.BeginForm("LogOn", "HomeController")
.