为什么UrlHelper.Action()合并了多余的参数

时间:2014-02-01 12:33:15

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

我在RouteConfig中有路线:

routes.MapRoute(
    name: "AdsCategories",
    url: "Ads/{key}",
    defaults: new 
    { 
        controller = "Ads", 
        action = "Index", 
        key = UrlParameter.Optional 
    },
    constraints: new
    {
        key = new ExcludingValuesConstraint(
                  "edit", "create", "details",
                  "delete", "AdsSlider", "UserAds", 
                  "GetCitiesByRegion", "Index", "AddComent",
                  "search", "SetFilter")
    },
    namespaces: new string[] { "Vprok.Controllers" }
);

在htmlhelper中形成链接的代码:Link.MergeAttribute("href", urlHelper.Action(action, controller));

如果我去页面广告/ somekey。并在此页面上使用帮助程序:@Html.ActiveLi("Объявления", "Index", "Ads")。返回“Ads / somekey”而不是“Ads /”。 为什么UrlHelper.Action合并了{key} parametr whith URL?

已解决问题。此代码返回“广告/”:Link.MergeAttribute("href",urlHelper.RouteUrl("Default", new{ action, controller}));

1 个答案:

答案 0 :(得分:0)

这是因为当UrlHelper.Action生成出站网址时会重复使用当前路由值。您可以为UrlHelper.Action方法提供空路由值,以覆盖不需要的路由值。

另请参阅此similar question