ASP.NET 4.0 URL-маршрутизация - похожие MapPageRoutes - PullRequest
1 голос
/ 29 декабря 2011

Я постараюсь объяснить это как можно лучше.

Я создал CMS, которая позволяет создавать категории и разделы контента. Оба имеют совершенно разные шаблоны, но я хочу использовать один и тот же параметр маршрутизации URL mapPageRoute при маршрутизации. По сути, он мне нужен, чтобы проверить, является ли псевдоним категорией, если не попадет в маршрутизатор раздела контента.

Вот мои зарегистрированные маршруты на 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"
    );
}

В настоящее время категории работают нормально, но когда я помещаю псевдоним раздела контента в URL, он попадает в категории и не пытается перейти к следующему маршруту. Веб-формы Category.aspx и Content.aspx имеют совершенно разные представления. Код позади похож, но один обращается к таблицам / процедурам Категории, а другой - к Содержанию.

Если кому-то требуется дополнительная информация, просто спросите.

1 Ответ

2 голосов
/ 29 декабря 2011

Вы пробовали что-то подобное?

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" 
    ); 
} 

А затем убедитесь, что в URL-адресе есть категория или контент в пути.Вы по-прежнему получаете универсальное с *queryvalues

РЕДАКТИРОВАТЬ:

Если у вас есть следующие URI http://www.example.com/Content/Press, вы можете получить доступ к Press с помощью следующего:

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

Итак, на вашей странице Content.aspx возьмите эту строку, а затем используйте ее, чтобы определить, на какой сайт пытался попасть пользователь.

Вам необходимо включить некоторый вид статического дифференциатора URL, чтобыMapRouter может найти, где отобразить страницу.

Если вы не включите статические Category или Content в начало uri, MapRouter всегда будет удовлетворен первой картой (отображением категории) и никогда не будет пропустить ее.

...