Asp.net mvc routing:ActionLink返回一个带有querystring参数的url

时间:2010-01-17 14:45:01

标签: asp.net asp.net-mvc routing query-string actionlink

直升机, 我尝试使用这样的网址/论坛/索引/ 2

for url我在global.asax

中有一条路线 {controller} / {action} / {page}

如果我使用Route Debugger测试上面的url它对应于上面的路由(以及其他一些但是这是列表中的第一个)但是如果我使用ActionLink创建一个url(如下所示:<%= Html.ActionLink(item.Title,“Index”,new {controller =“Forum”,page = page})%>),这个方法返回这个URL /论坛/索引?page = 2

使用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 个答案:

答案 0 :(得分:3)

听起来你的路线注册就好了。您只需要使用Html.RouteLink帮助程序并告诉它要使用的路由的名称:

<%= Html.RouteLink(item.Title, "DefaultWithPager", new { controller = "Forum", page = page })%>

答案 1 :(得分:0)

Mvc路由的工作方式是按顺序评估每条路由,并使用匹配的第一条路由。在您的情况下,匹配的第一个将是:

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

由于该路由没有页面的任何映射,它会将其作为get参数附加到url。

如果您希望它能够使用页面映射,而该映射应该出现在与您传入的路径数据相匹配的任何其他路径之前。

它应该始终从最具体到最不具体。