开发者

MVC Routing: Trying to get dynamic root value working

I am trying to define dynamic sections of my site with the root url of the site. I am having some trouble defining the right MVC Route for it. Can someone please help.

My desired url will look like this: http://website.com/[dynamic-string]

But I have other standard pages like: http://website.com/about or http://website.com/faq or even just http://website.com.

My routes don't work correctly with that dynamic string. As shown below.

This is the route for the dynamic-string.

    routes.MapRoute(
    "CommunityName", // Route name
    "{communityName}", // URL with parameters
    new { controller = "Community", action = "Community", communityName = UrlParameter.Optional }
  );

This is the route for all other STANDARD PAGES

 开发者_开发问答routes.MapRoute(
 "Default", // Route name
 "{action}", // URL with parameters
 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
 );

My routes just don't match up. Everything either gets diverted to one or the other route depending on which route is declared first.


There is no difference between the two routes you mention. How can MVC know which url should be mapped to communityName and which to action? Any url can match both.

You can define your standard pages as a route (before the CommunityName route) or you can catch them in your Community action, see if the name matches a function in your Home controller and then call the right action function.

I've never done this before but you might be able to create a more intelligent routehandler that looks at your controller actions, checks if the action really exists and if true selects that route.


this is beacuse the routes are effectively the same. When you declare the action route you do not state any constraints to the route, for this reason anything will be assumed to be a the action name.

If you want two routes to capture at the same level then you must constrain the action names to those that exist on your controller, this way if it does not match it will pass to the next route.

You can see an example of and advanced constraint here:

http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Custom-route-constraint-to-validate-against-a-list.aspx

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜