路由值已删除但仍添加为查询字符串参数

时间:2013-01-14 16:49:46

标签: asp.net-mvc

我正在扩展模型以包含链接属性。它基于其中的其他属性来生成链接:

public partial class MyModelType
{
    public string FilterLink
    {
        get
        {
            var u = new UrlHelper(HttpContext.Current.Request.RequestContext);
            var route = new RouteValueDictionary(u.RequestContext.RouteData.Values);
            route.Remove("other");
            route.Add("other", null);
            route.Add("id", this.Id);
            return u.Action("Index", "ControllerName", route);
        }
    }
}

生成的链接为/ControllerName/1?other=2。如果我摆脱了route.Remove("other"),我会根据映射的路由得到链接:/ControllerName/1/2。如何从路由中删除它时,如何防止将其用作查询字符串参数? UrlHelper似乎以某种方式添加它,即使它不是路由值。

2 个答案:

答案 0 :(得分:0)

检查您的路由配置。

MVC路由将以这种方式附加您路线的任何未知部分,因此只要您预先定义它,它应该可以正常工作。

你可能只有这个:

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

尝试添加option,如下所示:

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}/{option}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, option = UrlParameter.Optional }
    );

答案 1 :(得分:0)

这里讨论的问题是:http://erraticdev.blogspot.com/2011/03/removing-route-values-from-linksurls-in.html

然而,与评论中的简单解决方案相比,博客提案更复杂:添加"其他= null作为对象"到DEFAULT路由的默认值。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, other = null as object }
);