2010-08-24 3 views
0

У меня есть маршрут в моем ASP.NET MVC 2-сайт, который выглядит, как этотмаршрутизации проблема с - в переменной

routes.MapRoute(
       "media_display", 
       "Media/{mediaId}-{mediaName}", 
       new { controller = "Media", action = "Display" }, 
       new { mediaId = @"\d+" } 
      ); 

Где MediaId это идентификатор, и MEDIANAME это название СМИ. Пример

www.example.com/Media/1-test-media-list

Если идентификатор 1, а название «список тестов СМИ», проблема здесь что я заменяю пространство «» на -, и это разрушает мой маршрут.

Я просто не могу понять, как это сделать, поэтому «mediaName» может содержать.

У меня также есть следующая версия, но решение должно быть одинаковым.

routes.MapRoute(
       "media_display", 
       "Media/{mediaId}-{mediaName}/edit", 
       new { controller = "Media", action = "Edit" }, 
       new { mediaId = @"\d+" } 
      ); 

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

www.example.com/Media/1-test-media-list

www.example.com/Media/1-

www.example.com/Media/1

ответ

1

Я считаю более Ele gant и более простое решение иметь www.example.com/Media/1/test-media-list.

Если вы настаиваете на ваших примерах URL-адрес, проложить маршрут, как это:

routes.MapRoute(
       "media_display", 
       "Media/{slug}", 
       new { controller = "Media", action = "Display" }, 
      ); 

и использовать технику, описанную в this blog post разобрать Ид, имя или все, что вам нужно от пули в вас параметры действий.

+0

Я бы сказал, что www.example.com/Media/1-test-media-list является самым элегантным: D Сульоция слизняка нарушит создание URL-адресов, где я использую Html.Action («Дисплей», «Медиа», новый {mediaId = 1, mediaName = "Some Name"}); Но если никто не сможет мне помочь с помощью {mediaId} - {mediaName} sulotion, я буду использовать {mediaId}/{mediaName} – Androme

+0

. Раньше у меня было свойство, которое возвращало сгенерированный slug в моей модели представления, когда я использовал это , Тогда у вас будет Html.Action («Дисплей», «Медиа», новый {slug = Model.MediaSlug}). Но я все еще думаю, что/id/name лучше. Смотри! Даже SO использует его;) – Necros

+0

Я использовал решение id/name – Androme

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