i have mvc 4 application. in application have areas, url not resolved properly. locationarearegistration.cs follows:
context.maproute( "location_default", "{culture}/{controller}/{action}/{id}", new { culture = "en", action = "locationindex", id = urlparameter.optional }, new { controller = "(locationindex)" } ); my route.config follows:
routes.maproute( name: "default", url: "{culture}/{controller}/{action}/{id}", defaults: new { culture = "en", controller = "home", action = "index", id = urlparameter.optional }, namespaces: new[] { "locator.areas.location.controllers" } ).datatokens.add("area", "location"); i have tried change route.config below:
routes.maproute( name: "default", url: "{culture}/{controller}/{action}/{id}", defaults: new { culture = "en", controller = "home", action = "index", id = urlparameter.optional }, namespaces: new[] { "locator.areas.location.controllers" } ); none of approaches worked , the resource cannot found error.
however when change locationarearegistration.cs follows, works:
context.maproute( "location_default", "{culture}/location/{controller}/{action}/{id}", new { culture = "en", action = "locationindex", id = urlparameter.optional }, new { controller = "(locationindex)" } ); but not want url contain location(area name). doing wrong?
edit
the urls going like:
http://localhost/en/locationindex/locationindex here en current culture, home controller name , index action method name.
to make location area default set of routes mvc application, need define routeconfig.cs follows:
public class routeconfig { public static void registerroutes(routecollection routes) { routes.ignoreroute("{resource}.axd/{*pathinfo}"); routes.maproute( name: "default_localized", url: "{culture}/{controller}/{action}/{id}", defaults: new { controller = "home", action = "index", id = urlparameter.optional }, constraints: new { culture = new cultureconstraint(defaultculture: "en", pattern: "[a-z]{2}") }, namespaces: new string[] { "locator.areas.location.controllers" } ).datatokens["area"] = "location"; routes.maproute( name: "default", url: "{controller}/{action}/{id}", defaults: new { culture = "en", controller = "home", action = "index", id = urlparameter.optional }, namespaces: new string[] { "locator.areas.location.controllers" } ).datatokens["area"] = "location"; } } note replace functionality of default controllers in application , send of requests location namespace.
you should not put route definitions locationarearegistration.cs file. ensure run last , don't screw of other area routes.
here definition of cultureconstraint. see this answer more details how localize routes.
using system.text.regularexpressions; using system.web; using system.web.routing; public class cultureconstraint : irouteconstraint { private readonly string defaultculture; private readonly string pattern; public cultureconstraint(string defaultculture, string pattern) { this.defaultculture = defaultculture; this.pattern = pattern; } public bool match( httpcontextbase httpcontext, route route, string parametername, routevaluedictionary values, routedirection routedirection) { if (routedirection == routedirection.urlgeneration && this.defaultculture.equals(values[parametername])) { return false; } else { return regex.ismatch((string)values[parametername], "^" + pattern + "$"); } } }