防止ActionLink使用路由值

时间:2011-01-16 12:54:39

标签: asp.net-mvc

这实际上是How Can I Stop ASP.Net MVC Html.ActionLink From Using Existing Route Values?

的副本

根据@Eilon -

  

因为一旦你使参数段无效,那么它之后的所有参数段都将失效。

就我而言,我有两个Action链接,链接到不同控制器上的操作。

这两个操作都有一个可选的页面参数。

路线配置如下:

    // blog routes

    routes.MapRoute(
        "",
        "blog/page{page}",
        new { controller = "Blog", action = "Index" },
        new { page = @"\d+" }
    );

    routes.MapRoute(
        "",
        "blog/{id}",
        new { controller = "Blog", action = "Post" }
    );

    routes.MapRoute(
        "",
        "blog",
        new { controller = "Blog", action = "Index" }
    );

    // project routes

    routes.MapRoute(
        "",
        "projects/page{page}",
        new { controller = "Project", action = "Index" },
        new { page = @"\d+" }
    );

    routes.MapRoute(
        "",
        "projects/{id}",
        new { controller = "Project", action = "Project" }
    );

    routes.MapRoute(
        "",
        "projects",
        new { controller = "Project", action = "Index" }
    );

问题是,如果我导航到项目的第2页,然后点击博客链接,我将被定向到/ blog / page2。

现在根据以上所述,如果参数段无效(在这种情况下控制器和动作都不同),则页面参数应该无效。如果使用标准的ActionLink重载指定了控制器和操作,它是否有效,或者仅当它们通过RouteValueDictionary传入时才适用?

目前,我必须创建一个自定义ActionLink来从RouteData中删除“page”参数。

谢谢, 本

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

可能不是理想的。但你可以:Html.ActionLink("action", "controller", new { page = "" })

似乎比创建自定义帮助程序要好一些。 HTH