注册并在一个页面中登录会更改我的网址

时间:2011-12-28 15:53:51

标签: asp.net-mvc

我有以下问题。

我有一个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”由UsersController登录操作处理。

当我发布我的登录表单发布到/ login如果以前我在url“/ register”,它会更改为/ login。有没有办法让我的网址“/注册”两个帖子?

如果网址更改,这是一种不好的做法吗?

1 个答案:

答案 0 :(得分:1)

您的URL表示调用的控制器方法,而不是显示View。你不能改变它,这就是MVC的工作方式。如果显示该页面需要“A”,您的浏览器不希望将其URL更改为“B”,您无法在渲染时更改它。

有趣的是,如果你给了你的方法相同的名字,并且以不同的方式命名你的观点,它将毫无障碍地工作: - )

但是,有几种方法可以解决这个问题:

  • 为您的方法指定相同的名称。这是最直接的选择。您可以保留视图名称,这是重要的方法名称。
  • 制作调用return View("Login")return View("Register")的方法(例如“切换板”)。您的网址将包含“切换台”(您需要一个更好的名称,但您明白了这一点。)
  • 将登录和注册页面设置为PartialViews。在1 View中显示这些(“Switchboard”,同名方法)。然后,URL将始终表示您为View调用的方法(“Switchboard”),而不是PartialView。

请记住,在MVC中,不是关于您正在显示哪个视图,而是关于您呼叫的是哪种方式。