2011-01-03 4 views
0

я использую следующую карту маршрута идентификаторамASP.NET MVC проблема маршрутизации: Как разрешить «» в

routes.MapRoute(
    "RenderAssociatedForm", 
    "DoAction/{nodeLevelId}/{nodeSystemId}", 
    new { 
    controller = "FrontEnd", 
    action = "RenderAssociatedForm",      
}); 

Теперь nodeLevelId может быть что-нибудь подобное zs\bbal. Как мы знаем, нам следует избегать «\», поэтому мы используем «zs% 5cbbal». Но все же следующий URL-адрес не сопоставляется с этим маршрутом.

//localhost/DoAction/zs%5cbbal/5

Когда я пытаюсь просто Id без экранирующего символа, он отображает правильно. Может ли кто-нибудь сказать мне, где я ошибаюсь?

+0

Нет решений? :( – Bipul

+0

Это новый год, и большинство людей по-прежнему проводят время со своими семьями. –

ответ

1

Вы можете попробовать его с двумя маршрутами. Первым маршрутом будет тот, который вы показали, а один после просто будет "DoAction/{nodeLevelId}".

0

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

routes.MapRoute(
     "RenderAssociatedForm", 
     "DoAction/{*nodeLevelId}/{nodeSystemId}", 
     new 
     { 
      controller = "FrontEnd", 
      action = "RenderAssociatedForm",      
     }); 
+0

Жаль, что это не сработает. Это дает вам ошибку «Параметр catch-all может отображаться только в качестве последнего сегмента URL маршрута» – Bipul

+0

@Bipul, измените свой маршрут тогда. Есть только один способ иметь косую черту в URL. Может быть, даже замените их тире? – jfar

-2

@jfar, возможно, имеет лучшее решение. Замените \ for a - или $ или что-то более удобное для URL.