ASP.NET 4.0 URL Routing – Similar MapPageRoutes

I will try to explain this the best I can.

I created a CMS that allows you to create Categories and Content Sections. Both have completely different templates, but I want to use the same URL routing mapPageRoute param when routing. Basically, I need it to check if the alias is a category, if not hit the content section router.

Here is my Registered Routes on Global.asax:

void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute(
        "Home",
        string.Empty,
        "~/Default.aspx"
    );

    routes.MapPageRoute(
        "Category",
        "{*CategoryAlias}",
        "~/templates/Category.aspx"
    );

    routes.MapPageRoute(
        "Content",
        "{*ContentAlias}",
        "~/templates/Content.aspx"
    );
}

Currently, Categories work fine, but when I put a content section alias in the URL it hits categories and doesn’t skip to the next route to try. The Category.aspx and Content.aspx web forms have completely different views. The code behind is similar but one accesses the Category tables/procedures and the other Content.

If anyone requires more information just ask.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Have you tried something like this?

void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute( 
        "Home", 
        string.Empty, 
        "~/Default.aspx" 
    ); 

    routes.MapPageRoute( 
        "Category", 
        "Category/{Cat}/{*queryvalues}", 
        "~/templates/Category.aspx" 
    ); 

    routes.MapPageRoute( 
        "Content", 
        "Content/{Cont}{*queryvalues}", 
        "~/templates/Content.aspx" 
    ); 
}

And then make sure the URLs have either Category or Content in the path. You still get the catch-all with *queryvalues

EDIT:

If you have the following uri http://www.example.com/Content/Press you can access Press by using the following:

Page.RouteData.Values["Cont"].ToString();

So, in your Content.aspx page, grab that string and then use that to determine which site the user was trying to get to.

You need to include some kind of static URL differentiator so that the MapRouter can find where to map the page.

If you don’t include the static Category or Content in the beginning of the uri, the MapRouter will always be satisfied with the first map (the Category mapping) and never know to skip it.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x