ASP.NET MVC 3 - сложность понимания маршрутов - PullRequest
2 голосов
/ 13 января 2012

Я создал систему в MVC 3, используя учебник NerdDinner в качестве основы для отработки. Я не уверен, что полностью понимаю маршрутизацию.

Все работало нормально, пока я не добавил сортировку в имеющийся у меня помощник по разбиению на страницы.

Вот глобальный.asax.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "UpcomingKeyDates", // Route name
        "KeyDates.mvc/{sortBy}/Page/{page}", // URL with parameters
        new { controller = "Home", action = "Index" } // Parameter defaults
    );

    routes.MapRoute(
       "Default", // Route name
       "{controller}.mvc/{action}/{id}", // URL with parameters
       new { controller = "Home", action = "Index", sortBy = "EventDate" } // Parameter defaults
    );

    routes.MapRoute(
        "Root", // Route name
        "", // URL with parameters
        new { controller = "Home", action = "Index", sortBy = "EventDate" } // Parameter defaults
    );

}

Я хочу, чтобы список по умолчанию сортировался по дате события по возрастанию при первом переходе на страницу (что работает нормально). Сортировка и нумерация страниц также работает отлично. Однако, когда я использую эту ссылку ...

<%: Html.ActionLink("Create New", "Create", "Home") %>

Ссылка просто указывает на ту же страницу. Нужно ли добавить новый маршрут или изменить существующий? Любая помощь высоко ценится.

Спасибо.

1 Ответ

1 голос
/ 13 января 2012

Маршрут по умолчанию должен всегда появляться последним и является универсальным маршрутом.Он автоматически перехватит пустой маршрут, эквивалентный http://yourdomain.com/

Маршрут по умолчанию всегда должен иметь следующий формат

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "foo", action = "bar", id=UrlParameter.Optional }
);

Кроме того, если страница будет числомВы можете ограничить его с помощью регулярного выражения (см. ниже).

Короче, измените ваш Global.asax так, чтобы он выглядел так:

...