I currently have the following in my RouteConfig.cs:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Identity",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Profile", action = "Identity" }
);
I'm trying to use the following in a Action method:
return RedirectToRoute("Identity", new { #id = id });
but it doesn't seem to go there, when I check with Fiddler, i see the request is going back to the same page i was currently on, it appears to be hitting the Default route. Is there anyway to force it to get the Identity one, even if their urls are the same, I want to use that to force users to the other controller when needed.
MVC will stop looking for a route as soon as a match is found. In your case, it will look in the following order: 1.) Default 2.) Identity.
If you want to create a specific route with the same pattern, you can achieve it with the following code:
routes.MapRoute(
name: "Identity",
url: "Profile/{action}/{id}",
defaults: new { controller = "Profile", action = "Identity" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
You do not need to 'Force' the user to another controller. It is a good practice to use the RedirectToAction method so you can supply the controller and action you want to bring the user to.
The solution supplied by #thiag0 will not work.
Use the following
return RedirectToAction("Identity", "Profile", new { id = 5 });
and in your Profile controller, make sure you can accept the parameter
public ActionResult Identity(int id)
{
return View();
}
and in RouteConfig.cs
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Identity",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Profile", action = "Identity"}
);
Related
I am trying to make a simple sample of passing string parameter in URL not using the queryString at this example. First of all I added a new MapRouteto RouteConfig.cs file as
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "app",
url: "{controller}/{action}/{name}"
);
and in Controller I have
public class AppController : Controller
{
public string Index(string name)
{
return HttpUtility.HtmlEncode("Hello " + name );
}
}
but the view is not displaying the string parameter. For example a URL like this http://localhost:59013/App/Index/Ali only return Hello!
Why is this happening?
Update
routes.MapRoute(
name: "app",
url: "{controller}/{action}/{name}",
defaults: new {action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
First, you need to change the order of your registered routes so the default will be the last.
Secondly, your app route pattern is wrong and will always collide with the default route. You better change its pattern to
url: "App/Index/{name}"
Or perhaps to the more friendlier
url: "App/{name}"
Both with
defaults: new { controller = "App", action = "Index" }
So that your routes would look like:
routes.MapRoute(
name: "app",
url: "App/{name}",
defaults: new { controller = "App", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
See MSDN
I have mvc actions defined in the controllers TasksController and TasksGridViewController. If the URL Tasks/Index or Tasks/GridView is called, MVC should look up the action in the TasksGridViewController, for all other actions it should use the TasksController.
I tried the following route for the action Index, but it doesn't work:
routes.MapRoute(
name: "GridViewController/Index",
url: "{controller}/Index",
defaults: new
{
controller = "{controller}GridView",
action = "Index"
});
What am I doing wrong here? Thanks for any help.
You could define those 2 specific routes BEFORE the default route:
routes.MapRoute(
name: "GridViewController_Index_Action",
url: "Tasks/Index",
defaults: new
{
controller = "TasksGridView",
action = "Index"
}
);
routes.MapRoute(
name: "GridViewController_GridView_Action",
url: "Tasks/GridView",
defaults: new
{
controller = "TasksGridView",
action = "GridView"
}
);
// Now comes the default route:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = "" }
);
I have 2 brands which use the same controller. In one brand the URL must look like ~Home/Index and in other URL should look like ~Account/Index, but the both URLs must point to the same Home Controller action methods.
Please give any idea how to achieve this.
Specify 2 route in the RouteConfig.cs
routes.MapRoute(
name: "Default",
url: "Home/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default1",
url: "Account/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Use this URL to call the Index() method in Home controller
1) http://localhost/../Home/Index
2) http://localhost/../Account/Index
Put below code inside Global.asax.cs
routes.MapRoute(
name: "Account",
url: "Account/Index",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "Home/Index",
defaults: new { controller = "Home", action = "Index" }
);
*Note:Always Default name put in last line in golbal.asax.cs
I'm using this code for routing in RouteConfig.cs :
routes.MapRoute("Default", "", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Now i want to change it, if the url is "<domain>/Saman/Profile", i should load the profile page for the user that username is "Saman".
Actually you have to give profile route before the default route.here url will look for the profile once it's find it will use the first route.i hope this will work.
routes.MapRoute(
name: "Profile",
url: "FilesView/{name}",
defaults: new { controller = "FilesView", action = "Profile", name = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "FilesView", action = "Index", id = UrlParameter.Optional }
);
I created simple asp.net project.
Have folder Account, and many files like Register.cshtml, LogIn, etc...
And url: localhost/Account/Register
Want it to be: localhost/Register, localhost/LogIn.
Tried to map it in _AppStart.cshtml:
RouteTable.Routes.MapPageRoute("Account", "{Action}", "~/Account/{Action}");
And it doesn't work.
First of all you have to use MapRoute to MapPageRoute, because MapPageRoute is (from msdn):
Provides a way o define routes for Web Forms applications
But if you modify your code like this:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("AccountRoute", "{Action}", new {controller = "Account"});
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Every request without parameters will go to AccountRoute, even if it should be handled by other controler.
The only way it will be working is to create code like this:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//ALL routes you need
routes.MapRoute("LoginRoute", "{Action}", new { controller = "Account", action = "Login" });
routes.MapRoute("RegisterRoute", "{Action}", new { controller = "Account", action = "Register" });
//Default route in the end
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Try this one....
//Default
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"",
new { controller = "Home", action = "Index", id = "" }
);
//url rewriting
RouteTable.Routes.MapRoute(null, "Register/{ID}", new { controller = "Home", action = "Register" });