我有一点问题:
让'假设我有以下路由设置(默认)但我有更多其他路由具有不同的可选url参数名称。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
我使用简单的逻辑创建了痕迹导航菜单:
foreach(var item in RouteData.Values){
if(item.Key.Equals("controller")) {
url = htmlHelper.ActionLink("Link text", "Index", item.Key).ToHtmlString();
}
...
}
好吧,当我在http://localhost:1234/
时,然后面包屑url返回正常。 http://localhost:1234/Home/Index
。
但是当访问http://localhost:1234/Home/Index/1
时,当前控制器的锚点url(在面包屑方面)就像来自浏览器的URL(相同的值,http://localhost:1234/Home/Index/1
)。
可以在Global.asax中自动删除url参数设置为UrlParameter.Optional
,以便不显示在锚点网址中吗?
id
很简单,我有许多路线和可选网址参数的不同名称。
由于
答案 0 :(得分:0)
你不能在global.asax中这样做。哟不能以这种方式改变方法行为。这没有任何意义:你的应用程序将停止按预期工作。
但是,您可以使用this overload os GenerateUrl提供空的RouteValueDictionary。通过这种方式,您可以摆脱当前的路径数据(包括当前请求参数,如您网址中的ID)。
public static string GenerateUrl(
string routeName,
string actionName,
string controllerName,
RouteValueDictionary routeValues,
RouteCollection routeCollection,
RequestContext requestContext,
bool includeImplicitMvcValues
)
这会为您提供一个可以创建操作链接的网址。