MVC3 URL Routing - PullRequest
       12

MVC3 URL Routing

0 голосов
/ 08 сентября 2011

Я хочу создать сайт, который динамически отображает маршруты следующим образом:

http://domain/MyCategory1
http://domain/
http://domain/MyCategory1/MySubCategory

Пока что я добавил новый маршрут к Global.asax

routes.MapRoute(
"IFAMainCategory", // Route name
"{IFACategoryName}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults
);

Но тогда это портит маршрут по умолчанию, который входит в стандартную комплектацию.

Есть ли способ, которым я могу это контролировать?

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Вам необходимо изменить маршруты:

 routes.MapRoute("MyCustomRoute", "MyCategory1/{action}/{id}",
     new { controller = "MyCategory1", action = "MySubCategory", id = UrlParameter.Optional });

// Then the default route

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

0 голосов
/ 08 сентября 2011

К сожалению, я не думаю, что вы достигнете того, чего хотите напрямую.

Вам нужен какой-то способ разделения маршрутов, например, размещение ваших «категорий» в папке:

routes.MapRoute(
                "IFAMainCategory", // Route name
                "categories/{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "GetSubCategories", IFACategoryName=1 } 
            );

Другой вариант - вы можете зарегистрировать маршрут для каждой родительской категории перед маршрутом по умолчанию при запуске приложения:

routes.MapRoute(
                "IFAMainCategory 1", // Route name
                "MyCategory1/{subcategory}", // URL with parameters
                new { controller = "Home", action = "GetSubCategories", IFACategoryName=1, subcategory =  UrlParameter.Optional } 
            );

routes.MapRoute(
                "IFAMainCategory 2", // Route name
                "MyCategory2/{subcategory}", // URL with parameters
                new { controller = "Home", action = "GetSubCategories", IFACategoryName=2, subcategory =  UrlParameter.Optional } 
            );
0 голосов
/ 08 сентября 2011

Вам необходимо включить MyCategory1 в название маршрута

routes.MapRoute( "IFAMainCategory", 
// Route name "MyCategory1/{IFACategoryName}", 
// URL with parameters new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults );

Посмотрите, например, этот другой пост, и проверьте Route Debugger

.NET MVC настраиваемая маршрутизация

...