Зарегистрируйтесь и войдите на одной странице, изменив мой URL - PullRequest
0 голосов
/ 28 декабря 2011

У меня возникла следующая проблема.

У меня есть View, типизированный для класса SiteAuthenticationVM.cs.

Имя моего представления "SiteAuthentication.cshtml" в папке Views / Users

С другой стороны, у меня есть один контроллер под названием UsersController с 4 действиями:

[HttpGet]
public ActionResult Registration()
{
   return View("SiteAuthentication");
}
[HttpPost]
public ActionResult Registration(SiteAuthenticationVM usertoregister)
{
   return View("SiteAuthentication",usertoregister);
}
[HttpGet]
public ActionResult Login()
{
   return View("SiteAuthentication");
}
[HttpPost]
public ActionResult Login(SiteAuthenticationVM usertologin)
{
   return View("SiteAuthentication",usertoregister);
}

У меня определены 2 маршрута:

  • "/ register" обрабатывается действием регистрации UsersController.

  • "/ login" обрабатывается действием LoginController.

Когда я публикую свою форму входа, она публикуется в / login, если ранее я был в URL "/ register", она меняется на / login. Есть ли способ сохранить мой URL "/ register" для обоих сообщений?

Это плохая практика, если URL меняется?

1 Ответ

1 голос
/ 28 декабря 2011

Ваш URL обозначает вызываемый метод контроллера, а не тот, который отображается.Вы не можете это изменить, так работает MVC.И ваш браузер не любит менять свой URL-адрес на «B», если ему нужно «A» для отображения этой страницы, вы действительно не можете изменить его во время рендеринга.

Забавно, если бы вы дали своим методам одно и то же имя и назвали свои взгляды по-другому, это сработало бы без проблем: -)

Однако есть несколько способовЯ могу обойти это:

  • Дайте вашим методам то же имя.Это самый простой вариант.Вы можете сохранить ваши имена View, важно имя метода.
  • Создайте метод (например, «Switchboard»), который вызывает либо return View("Login"), либо return View("Register").Ваш URL будет содержать «Коммутатор» (вам понадобится более подходящее имя, но вы поняли идею).
  • Создайте страницы входа и регистрации в PartialViews.Отобразите их в 1 виде («Коммутатор», метод с тем же именем).Тогда URL всегда будет обозначать метод («Коммутатор»), который вы вызывали для представления, а не для PartialView.

Просто помните, в MVC дело не в том, какое представление вы отображаете, а во том, какой метод вы вызываете.

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