MVC Routing: Попытка заставить работать динамическое корневое значение - PullRequest
1 голос
/ 18 июня 2011

Я пытаюсь определить динамические разделы моего сайта с помощью корневого URL сайта.У меня возникли проблемы с определением правильного маршрута MVC для него.Может кто-нибудь, пожалуйста, помогите.

Мой желаемый URL будет выглядеть так: http://website.com/[dynamic-string]

Но у меня есть другие стандартные страницы, такие как: http://website.com/about или http://website.com/faq илидаже просто http://website.com.

Мои маршруты не работают правильно с этой динамической строкой.Как показано ниже.

Это маршрут для динамической строки .

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

Это маршрут для всех других СТАНДАРТНЫХ СТРАНИЦ *

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

Мои маршруты не совпадают.Все либо перенаправляется на тот или другой маршрут в зависимости от того, какой маршрут объявлен первым.

Ответы [ 2 ]

1 голос
/ 18 июня 2011

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

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

Вы можете увидеть пример и расширенное ограничение здесь:

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

1 голос
/ 18 июня 2011

Нет разницы между двумя указанными вами маршрутами.Как MVC может узнать, какой URL-адрес должен быть сопоставлен с communityName, а какой - с действием?Любой URL может совпадать с обоими.

Вы можете определить свои стандартные страницы как маршрут (до маршрута CommunityName) или вы можете поймать их в своем действии Сообщества, посмотреть, соответствует ли имя функции в вашем контроллере Home, а затемвызовите правильную функцию действия.

Я никогда не делал этого раньше, но вы могли бы создать более интеллектуальный обработчик маршрутов, который будет проверять действия вашего контроллера, проверять, существует ли действие в действительности и выбирает ли этот маршрут значение true.

...