Форма входа не работает на странице указателя - PullRequest
0 голосов
/ 28 февраля 2010

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

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

// If we got this far, something failed, redisplay form
            return RedirectToAction("Error", "Home");

Я разместил код здесь: http://pastebin.com/RUj6ASvE

1 Ответ

1 голос
/ 28 февраля 2010

Это потому, что вы публикуете действие 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").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...