Im having the following issue.
I have a View typed to a class SiteAuthenticationVM.cs.
The name of my view is “SiteAuthentication.cshtml” into the folder Views/Users
For other hand, i have one controller called UsersController with 4 actions:
[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);
}
I have 2 routes defined:
-
“/register” is handled by UsersController Registration action.
-
“/login” is handled by UsersController Login action.
When i post my Login form is posted to /login if previously i was in url “/register”, it changes to /login. Is there any way to keep my url “/register” for both post actions?
Is a bad practice if the url changes?
Your URL is denoting the controller method which is called, not whih View is being displayed. You can’t change that, this is how MVC works. And your browser doesn’t like to change its URL to ‘B’ if it needed ‘A’ to display that page, you cant really change it at rendertime.
Funny thing, if you had given your methods the same name, and had named your views differently, it would’ve worked without a hitch 🙂
However, there are a few ways I can think of to get around this:
return View("Login")orreturn View("Register"). Your URL will contain “Switchboard” (you’ll want a better name, but you get the idea).Just remember, in MVC it’s not about which View you are displaying, it’s about which method you are calling.