Asp.net mvc маршрутизация: ActionLink возвращает URL с параметрами в строке запроса - PullRequest
1 голос
/ 17 января 2010

Helo, Я пытаюсь получить такой URL / Forum / Index / 2

для URL У меня есть маршрут {controller} / {action} / {page} в моем global.asax

Если я проверяю указанный выше URL с помощью отладчика маршрутов, он соответствует указанному выше маршруту (и некоторым другим, кроме первого в списке), но если я создаю URL с помощью ActionLink (например: <% = Html .ActionLink (item.Title, "Index", new {controller = "Forum", page = page})%>), этот метод возвращает мне этот URL / Forum / Index? Page = 2

Есть ли способ получить URL-адрес, не содержащий ничего в строке запроса с помощью метода ActionLink?

Это все мои маршруты, и маршрут матча называется DefaultWithPage:

routes.IgnoreRoute ( "{ресурс} .axd / {* PathInfo}"); routes.IgnoreRoute ( "google884930bf56853ce4.html");

        routes.MapRoute(
            "sitemapXML",
            "Sitemap.xml",                                                                                      // URL with parameters
            new { controller = "Sitemap", action = "Sitemap" }                                                  // Parameter defaults
        );

        routes.MapRoute(
            "ImageStat",                                                                                        // Route name
            "{controller}/{action}/{MailID}/{UserID}.gif",                                                      // URL with parameters
            new { controller = "", action = "", MailID = "", UserID = "" },                                     // Parameter defaults
            new { 
                MailID = @"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$", 
                UserID = @"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$" 
            }
        );

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

        routes.MapRoute(
            "DefaultWithPager",                                                                                 // Route name
            "{controller}/{action}/{page}",                                                                     // URL with parameters
            new { controller = "Home", action = "", page = "" },                                                // Parameter defaults
            new { page = @"^\d+$" }  
        );

        routes.MapRoute(
            "DefaultWithID",                                                                                    // Route name
            "{controller}/{action}/{ID}",                                                                       // URL with parameters
            new { controller = "Home", action = "", ID = "" },                                                  // Parameter defaults
            new { ID = @"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$" }
        );

        routes.MapRoute(
            "DetailWithID",                                                                                     // Route name
            "{controller}/{action}/{ID}/{Title}",                                                               // URL with parameters
            new { controller = "Home", action = "", ID = "", Title = "" },                                      // Parameter defaults
            new { ID = @"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$" }
        );

        //Handler route
        routes.MapRoute(
            "ImageResizer",                                                                                     // Route name
            "{controller}/{action}/{Title}/{ID}.jpg",                                                           // URL with parameters
            new { controller = "", action = "", Title = "", ID = "" }                                           // Parameter defaults
        );


        //Section Pages Routes
        routes.MapRoute(
            "SectionIndex",                                                                                     // Route name
            "{sectionName}/{controller}/{action}",                                                              // URL with parameters
            new { controller = "", action = "", sectionName = "" }                                              // Parameter defaults                
        );

        routes.MapRoute(
            "SectionDetails",                                                                                   // Route name
            "{sectionName}/{controller}/{action}/{ID}",                                                         // URL with parameters
            new { controller = "", action = "", sectionName = "", ID = "" }                                     // Parameter default
        );

        routes.MapRoute(
            "SectionDetailsWithDate",                                                                           // Route name
            "{sectionName}/{controller}/{action}/{month}/{year}",                                               // URL with parameters
            new { controller = "Home", action = "", page = "", month = "", year = "" },                         // Parameter defaults
            new { month = @"^\d+$", year = @"^\d+$" }
        );

        routes.MapRoute(
            "SectionDetailsWithTitle",                                                                          // Route name
            "{sectionName}/{controller}/{action}/{ID}/{Title}",                                                 // URL with parameters
            new { controller = "", action = "", sectionName = "", ID = "", Title = "" }                         // Parameter defaults
        );

        routes.MapRoute(
            "SectionDetailsPagingWithTitle",                                                                    // Route name
            "{sectionName}/{controller}/{action}/{page}/{ID}/{Title}",                                          // URL with parameters
            new { controller = "", action = "", sectionName = "", page = "", ID = "", Title = "" }              // Parameter defaults
        );

        routes.MapRoute(
            "SectionDetailsPaging",                                                                             // Route name
            "{sectionName}/{controller}/{action}/{page}/{ID}",                                                  // URL with parameters
            new { controller = "", action = "", sectionName = "", page = "", ID = "" }                          // Parameter defaults
        );

Готье

Ответы [ 2 ]

3 голосов
/ 18 января 2010

Похоже, что регистрация вашего маршрута в порядке. Вам просто нужно использовать помощник Html.RouteLink и сообщить ему имя используемого маршрута:

<%= Html.RouteLink(item.Title, "DefaultWithPager", new { controller = "Forum", page = page })%>
0 голосов
/ 31 мая 2016

Способ маршрутизации Mvc заключается в том, что он оценивает каждый из маршрутов по порядку и использует первый, который соответствует. В вашем случае первым будет соответствовать:

routes.MapRoute(
    "Default",
    "{controller}/{action}",
    new { controller = "Home", action = "Index" }
);

Поскольку у этого маршрута нет отображений для страницы, он добавит его в URL в качестве параметров получения.

Если вы хотите, чтобы он совпадал с отображением страницы, которое должно предшествовать любым другим маршрутам, которые будут соответствовать данным маршрута, который вы проходите.

Оно всегда должно переходить от большинства к наименее конкретным.

...