Asp.NET MVC 2 Routing - PullRequest
       20

Asp.NET MVC 2 Routing

4 голосов
/ 07 июня 2010

Я хочу определить маршрут с 2 необязательными параметрами в среднем URL start an end параметры - цифры

routes.MapRoute(
                "",
                "Source/Changeset/{start}/{end}/{*path}",
                new {
                        controller = "Source",
                        action = "Changeset",
                        start = UrlParameter.Optional,
                        end = UrlParameter.Optional, 
                        path = "crl"
                    },
                new { start = @"\d+", end = @"\d+" }
                );

Я пробовал разные подходы, но ни один из них не работал, я мог бы воспользоваться вашей помощью.

Заранее спасибо.

EDIT

Мне удается решить проблему таким образом, но это далеко не элегантно.

routes.MapRoute(
                "",
                "Source/Changeset/{start}/{end}/{*path}",
                new {
                        controller = "Source",
                        action = "Changeset",
                        start = UrlParameter.Optional,
                        end = UrlParameter.Optional, 
                        path = "crl"
                    },
                new { start = @"\d+", end = @"\d+" }
                );  

            routes.MapRoute(
                "",
                "Source/Changeset/{start}/{*path}",
                new
                {
                    controller = "Source",
                    action = "Changeset",
                    start = UrlParameter.Optional,
                    path = "crl"
                },
                new { start = @"\d+" }
                );  

            routes.MapRoute(
                "",
                "Source/Changeset/{*path}",
                new
                {
                    controller = "Source",
                    action = "Changeset",
                    path = "crl"
                }
                );  

1 Ответ

0 голосов
/ 07 июня 2010

вам нужно будет проложить маршруты для всех возможных комбинаций, которые могут стать немного пушистыми:

//route if everything is included
routes.MapRoute(null, ""Source/Changeset/{start}/{end}/{*path}",
    new { controller = "Home", action = "Index" }
);

//route if nothing is included
routes.MapRoute(null, ""Source/Changeset/{*path}",
    new { controller = "Home", action = "Index", start=0, end=5 } //defaults
);

//and so on...

Но здесь также есть проблема: поскольку start и end являются обеими цифрами, не будет никакого способа (так как они являются необязательными), чтобы решить, является ли '2' в Source / Changeset / 2 / fodass является переменной start или end , поэтому вам, возможно, придется придумать новый подход или изменить свой на что-то вроде Источник / Changeset / Start / 2 / fodass , Источник / Changeset / End / 5 / fodass , Источник / Changeset / Start / 2 / End / 5 / fodass и т. д.

...