带参数的路由问题

时间:2011-09-17 13:24:25

标签: asp.net-mvc asp.net-mvc-routing

我在我的视图中定义了两个操作链接,如下所示:

@Html.ActionLink("Baxter", "SearchAffaires", new { LabelName = "Baxter" })
@Html.ActionLink("Favorite", "SearchAffaires", new { OnlyFavorite = true })

我定义了以下两条路线:

        routes.MapRoute(
        "Search Affaire Only Label", // Route name
        "{controller}/Label/{LabelName}", // URL with parameters
        new { controller = "Affaire", action = "SearchAffaires" } // Parameter defaults
        );

        routes.MapRoute(
        "Search Affaire Only Favorite", // Route name
        "{controller}/Favorite", // URL with parameters
        new { controller = "Affaire", action = "SearchAffaires", OnlyFavorite = true } // Parameter defaults
        );

如果我开始使用我的解决方案并指向我最喜欢的链接,我会收到以下网址:

http://localhost:3817/Affaire/Favorite

这对我没问题。现在,我重新开始我的解决方案(重要),我指向一个'标签'链接(对于这个例子,我的标签是Baxter),我得到以下网址:

http://localhost:3817/Affaire/Label/Baxter

这对我没问题。现在我没有重新启动我的解决方案,我指向我的“最喜欢的”链接,我得到以下网址:

http://localhost:3817/Affaire/Label/Baxter?OnlyFavorite=True

如您所见,名为OnlyFavorite的参数再次传递,但我没想到!

我该怎么做才能避免这种行为?

感谢。

1 个答案:

答案 0 :(得分:1)

问题是在您添加链接时MVC无法知道您要使用哪条路由,因为它具有当前请求中的所有参数LabelName已设置,因此它匹配Search Affaire Only Label路线。

这是一个修复。同样你也可以添加LabelName不能为空的约束,因此它匹配第二条路径:

routes.MapRoute(
    "Search Affaire Only Label",
    "{controller}/Label/{LabelName}",
    new { controller = "Affaire", action = "SearchAffaires" }
    );

routes.MapRoute(
    "Search Affaire Only Favorite",
    "{controller}/Favorite",
    new
    {
        controller = "Affaire",
        action = "SearchAffaires",
        LabelName = string.Empty,
        OnlyFavorite = true
    }
);

@Html.ActionLink("Baxter", "SearchAffaires", 
                 new { LabelName = "Baxter" })
@Html.ActionLink("Favorite", "SearchAffaires", 
                 new { LabelName = string.Empty, OnlyFavorite = true })