asp.net mvc и маршрутизация - PullRequest
       14

asp.net mvc и маршрутизация

0 голосов
/ 24 января 2012

У меня есть следующие действия в контроллере

public ActionResult Index(int? pageNumber)
public ActionResult Details(string seoFriendlyName)

И я хочу иметь следующие маршруты:

~/article/ -> Action = Index, pageNumber = 1
~/article/page-5 -> Action = Index, pageNumber = 5
~/article/page-1 -> ~/article/
~/article/foo -> Action = Details, seoFriendlyName = foo

Я попытался определить следующие маршруты, но это нене работает:

routes.MapRoute(
                null,
                "article/page-{pageNumber}",
                new { controller = "MyController", action = "Index", pageNumber = 1 },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article",
                new { controller = "MyController", action = "Index", },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article/{seoFriendlyName}",
                new { controller = "MyController", action = "Details", },
                new[] { "MyNamespace" }
);

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Ваши требования противоречивы. Например, какой маршрут следует выбрать, если у вас есть статья с seoFriendlyName == "page-6" и реальным pageNumber == 2?

Я бы посоветовал вам изменить ваши требования на

~/article/ -> Action = Index, pageNumber = 1
~/article/page/5 -> Action = Index, pageNumber = 5
~/article/page/1 -> ~/article/
~/article/foo -> Action = Details, seoFriendlyName = foo

и тогда у вас будут следующие маршруты:

routes.MapRoute(
                null,
                "article/page/{pageNumber}",
                new { controller = "MyController", action = "Index", pageNumber = 1 },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article",
                new { controller = "MyController", action = "Index", },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article/{seoFriendlyName}",
                new { controller = "MyController", action = "Details", },
                new[] { "MyNamespace" }
);

UPDATE

В ответ на комментарии:

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

routes.MapRoute(
                null,
                "article",
                new { controller = "MyController", action = "Index", pageNumber = 1 },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article/page/{pageNumber}",
                new { controller = "MyController", action = "Index", },
                new[] { "MyNamespace" }
);


routes.MapRoute(
                null,
                "article/{seoFriendlyName}",
                new { controller = "MyController", action = "Details", },
                new[] { "MyNamespace" }
);
0 голосов
/ 24 января 2012

Вы не сказали нам, что именно не работает.Единственное, что я видел, это то, что вы установили неправильные значения для вашего параметра pageNumber.

Это должно работать лучше:

routes.MapRoute(
    null,
    "article",
    new { controller = "MyController", action = "Index", pageNumber = 1 },
    new[] { "MyNamespace" }
);

routes.MapRoute(
    null,
    "article/page-{pageNumber}",
    new { controller = "MyController", action = "Index"},
    new[] { "MyNamespace" }
);

routes.MapRoute(
    null,
    "article/{seoFriendlyName}",
    new { controller = "MyController", action = "Details" },
    new[] { "MyNamespace" }
);
...