My URL requirement is countryname/statename/cityname
. For this I'm writing my own RouteHandler
and adding one new route into the routecollection
like this:
routes.Add(new Route("{*data}",
new RouteValueDictionary(new
{
controller = "Location",
action = "GetLocations"
}),
new MyRoutehandler()));
Now my question is: How do I generate this type of URL?
I tried Html.ActionLink()
but it's asking for an action name and controller name. However, in my URL format I don't have any action name or controller name. How do I solve this?
-
Read here: http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx
-
Is there a reason you can't just use the following with the built-in route handler:
routes.MapRoute("LocationRoute", "{countryname}/{statename}/{cityname}", new { controller = "Location", action = "GetLocations" });
That may conflict with the default "{controller}/{action}/{id}" route, but that would happen with your current system anyway (unless you make a custom Route, inheriting from
System.Web.Routing.RouteBase
, rather than a custom Route Handler). The Route Handler is for handling what to do AFTER the route data has been extracted. Since you're still using Controller and Action, you should still be able to use theMvcRouteHandler
. If you want to customize how the Route Data is extracted, you probably want a custom Route.Btw, if you want to use a route which doesn't involve Controller and Action names, use
Html.RouteLink
.ActionLink
is just a wrapper which puts the controller and action into theRouteValuesDictionary
and calls the same internal helper asRouteLink
.Although in this case, the route still has a Controller and Action ("Location" and "GetLocations"), so you can still use
ActionLink
. I thinkActionLink
lets you specify a Route Name, so if you give your route a name you can specify that name inActionLink
and it will use that route to generate the URL (I may be wrong about that and if so you can still useRouteLink
and manually add the controller and action route values)
0 comments:
Post a Comment