2011-12-20 3 views
0

У меня есть несколько маршрутов, которые относятся к разным контроллерам, а несколько маршрутов имеют одинаковое количество параметров. пожалуйста, посмотрите на моем примере нижеASP.NET Множественные маршруты и недопустимые значения dataroute

routes.MapRoute("AdInfo", "{controller}/{action}/{AdGUID}/{UserID}/{Category}", 
    new 
    { 
     controller = "Home", 
     action = "DetailAd", 
     AdGUID = UrlParameter.Optional, 
     UserID = UrlParameter.Optional, 
     Category = UrlParameter.Optional 
    }); 

routes.MapRoute("PostAd", "{controller}/{action}/{MainCategory}/{SubCategory}/{SubCategoryGUID}", 
    new 
    { 
     controller = "Classified", 
     action = "Post", 
     MainCategory = UrlParameter.Optional, 
     SubCategory = UrlParameter.Optional, 
     SubCategoryGUID = UrlParameter.Optional 
    }); 

Маршруты AdInfo и PostAd имеют три параметра, но оба они относятся к другому контроллеру и действию. asp.net mvc неправильно интерпретирует, когда я нажимаю URL-адрес, который, как предполагается, ссылается на Controller Scart - сообщение о действии с данными маршрутных данных MainCategory, подкатегорией и подкатегориейGUID. так или иначе, значения данных маршрута - AdGUID, UserID и категория.

У вас есть идеи, как решить эту проблему?

ответ

0

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

routes.MapRoute("AdInfo", "Home/{action}/{AdGUID}/{UserID}/{Category}", 
    new 
    { 
     controller = "Home", 
     action = "DetailAd", 
     AdGUID = UrlParameter.Optional, 
     UserID = UrlParameter.Optional, 
     Category = UrlParameter.Optional 
    }); 

routes.MapRoute("PostAd", "Classified/{action}/{MainCategory}/{SubCategory}/{SubCategoryGUID}", 
    new 
    { 
     controller = "Classified", 
     action = "Post", 
     MainCategory = UrlParameter.Optional, 
     SubCategory = UrlParameter.Optional, 
     SubCategoryGUID = UrlParameter.Optional 
    }); 

Конечно, в некоторых ситуациях это не сработает. Единственный способ, которым я могу видеть возможность использовать этот маршрут для нескольких контроллеров тоже есть путем добавления суффикса после регулятора, как это:

routes.MapRoute("AdInfo", "{Controller}/{action}/SomeNameThatSeperatesThisRouteFromTheNext/{AdGUID}/{UserID}/{Category}", 

Или, если на втором маршруте действие всегда будет то же самое, то просто жестко закодируйте его в маршрут, и теперь у вас будет два разных маршрута (убедитесь, что маршрут, в котором вы указываете жесткий код перед другим маршрутом).

Смежные вопросы