2013-11-19 3 views
0

У меня есть вид на /Folders/Index. Я хотел был бы перейти к /Folders вместо этого, а также передать идентификатор, например /Folders/123. Таким образом, я создал этот маршрут:Пользовательские настройки маршрута по умолчанию для индекса

routes.MapRoute(
    name: "", 
    url: "Folders/{parentFolderId}", 
    defaults: new { controller = "Folders", action = "Index", 
     parentFolderId = UrlParameter.Optional } 
); 

Это работало в ситуациях, указанных выше.

Проблема в том, что если я попытаюсь перейти на /Folders/Create, он просто отобразит мой Index вид.

Как я могу правильно изменить маршрут?

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

ответ

0

Попробуйте

routes.MapRoute(
    name: "", 
    url: "Folders/{action}", 
    defaults: new { controller = "Folders", action = "Index" } 
); 
+0

Как это отличается от маршрута по умолчанию? –

2

Я думаю, вам нужно использовать два пути для решения этой ситуации - первый, чтобы соответствовать «/ папки/Id» и второй для решения «/ папки/Действие»

routes.MapRoute(
name: "", 
url: "Folders/{parentFolderId}", 
defaults: new { controller = "Folders", action = "Index", 
    parentFolderId = UrlParameter.Optional }, 
constraints: new { parentFolderId = @"^[0-9]*$" }); 

routes.MapRoute(
name: "", 
url: "Folders/{action}", 
defaults: new { controller = "Folders", action = "Index"}); 

EDIT: Если вы хотите сопоставить любой параметр parentFolderId без ограничений, тогда вы должны сначала нарисовать действие create, а затем parentFolderId.

routes.MapRoute(
name: "", 
url: "Folders/Create", 
defaults: new { controller = "Folders", action = "Create"}); 

routes.MapRoute(
name: "", 
url: "Folders/{parentFolderId}", 
defaults: new { controller = "Folders", action = "Index", 
    parentFolderId = UrlParameter.Optional }); 
+0

Ограничения в первом маршруте важны, потому что, чем первый маршрут не будет соответствовать «/ Folders/Create» –

+0

Если вы хотите сопоставить parentFolderId без каких-либо ограничений, тогда вы должны поместить карту маршрута действия в действие до карты маршрутов «Folders/{parentFolderId}». –

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