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

+0

在u.RequestContext.RouteData.Values中传递了什么值? – rae1

+0

只是'other'和'id'(尽管可能还有更多)。 “其他”可能是也可能不是路由值。它取决于模型所在的视图和动作参数(“其他”可为空) – SamWM

回答

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 } 
    ); 
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 } 
);