2

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

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 似乎以某种方式添加它,即使它不是路由值。

4

2 回答 2

0

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

然而,与评论中的一个简单解决方案相比,博客的提议令人费解:将“other = null as object”添加到您的 DEFAULT 路由的默认值中。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, other = null as object }
);
于 2014-05-12T18:09:21.577 回答
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 }
    );
于 2013-08-09T06:53:27.373 回答