我正在扩展模型以包含链接属性。它基于其中的其他属性来生成链接:
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 :(得分: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 }
);