ASP.NET MVC - навигационный подход - PullRequest
2 голосов
/ 07 декабря 2009

Я новичок в ASP.MVC. Мой опыт работы в ASP.NET Web Forms, я думаю, именно это и вызывает мое замешательство. Я понимаю, что буква «M» в основном представляет источник данных, буква «V» - ресурс, который я запрашиваю, а буква «C» - то, что показывается конечному пользователю. Но тогда я запутался.

Например, я просто пытаюсь создать экран входа в систему. Я предполагаю, что пользователь посетит "http://www.myapp.com/Account/Login", и ему будет представлен традиционный экран входа в систему. Для этого я добавил следующее в метод RegisterRoutes в моем файле Global.asax:

routes.MapRoute(
  "Login",
  "{controller}/{action}",
  new { controller = "Account", action = "Login", id = "" }
);

Действие «Вход в систему» ​​выполняется, но здесь я запутался. Видите ли, при первой загрузке экрана входа в систему я ожидал бы просто показать поле имени пользователя / пароля. Тогда на посту, я ожидаю, что форма будет проверена и обработана. В попытке сделать это я создал следующий метод:

public ActionResult Login()
{
  bool isFormValid = ValidateForm();
  if (isFormValid)
    LoginUser();
  else
    ShowErrors();

  return View();
}

Мое замешательство связано с действием входа в систему. Изначально данных нет. Но в следующий раз я хочу проверить данные. Как определить, является ли Действие обратной передачей или нет?

Спасибо!

Ответы [ 2 ]

8 голосов
/ 07 декабря 2009

Самый простой способ справиться с этим - это два действия: одно для получения, одно для публикации. Используйте атрибут AcceptVerbs для контроля, который вызывается в зависимости от метода. Кстати, маршруты по умолчанию должны работать просто отлично для этого случая, так как, когда контроллер и действие предоставлены, оно направляется так, как вы ожидаете. Я думал, что этот сценарий также включен в шаблон проекта - вы настроили проект с использованием шаблона или пустого?

[AcceptVerbs( HttpVerbs.Get )]
public ActionResult Login()
{
}

[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Login( string userName, string password )
{
}
2 голосов
/ 07 декабря 2009

Вам нужны два разных метода: Post и Get.

[AcceptVerbs (HttpVerbs.Get]
public ActionResult Login ()
{
    return View ();
}

[AcceptVerbs (HttpVerbs.Post]
public ActionResult Login (FormCollection form)
{
    if (AuthenticationSuccess ())
        return RedirectToAction ("Account");
    else
        return View ();
}

Для почтовой версии вы можете использовать механизм привязки модели:

public ActionResult Login (LoginModel loginModel)

Или

public ActionResult Login (string LoginName, string Password)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...