2009-04-14 2 views
0

Требования к моему URL-адресу: countryname/statename/cityname. Для этого я пишу свой собственный RouteHandler и добавляя один новый маршрут в routecollection, как это:Как я могу реализовать динамическую маршрутизацию с моим выбором формата URL?

routes.Add(new Route("{*data}", 
      new RouteValueDictionary(new 
       { 
       controller = "Location", 
       action = "GetLocations" 
       }), 
      new MyRoutehandler())); 

Теперь мой вопрос: Как я могу создать этот тип URL?

Я пробовал Html.ActionLink(), но он просит имя действия и имя контроллера. Однако в моем URL-формате у меня нет имени действия или имени контроллера. Как я могу это решить?

ответ

0

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

routes.MapRoute("LocationRoute", 
       "{countryname}/{statename}/{cityname}", 
       new { controller = "Location", action = "GetLocations" }); 

Это может противоречить по умолчанию «{контроллер}/{действие}/{ID}» маршрут, но это будет происходить с вашей текущей системой в любом случае (если вы не сделаете обычай Маршрут, наследующий от System.Web.Routing.RouteBase, а не обычай Обработчик маршрута). Обработчик маршрута предназначен для обработки того, что делать ПОСЛЕ того, как данные маршрута были извлечены. Поскольку вы все еще используете Controller и Action, вы все равно сможете использовать MvcRouteHandler. Если вы хотите настроить, как извлекаются данные маршрута, вам, вероятно, понадобится таможня Маршрут.

Btw, если вы хотите использовать маршрут, который не связан с именами контроллеров и действий, используйте Html.RouteLink. ActionLink - это всего лишь оболочка, которая помещает контроллер и действие в RouteValuesDictionary и вызывает тот же внутренний помощник, что и RouteLink.

Хотя в этом случае маршрут по-прежнему имеет контроллер и действие («Местоположение» и «GetLocations»), поэтому вы все равно можете использовать ActionLink. I думаюActionLink позволяет указать имя маршрута, поэтому, если вы укажете свой маршрут имени, вы можете указать это имя в ActionLink, и он будет использовать этот маршрут для создания URL-адреса (возможно, я ошибаюсь в этом, и если так, используйте RouteLink и вручную добавьте контроллер и значения маршрута действия)

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

  • Нет связанных вопросов^_^