0

我有一个小问题:

假设我有以下路由设置(默认),但我有更多其他路由具有不同的可选 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/面包屑网址返回正常。http://localhost:1234/Home/Index.

但是当访问时http://localhost:1234/Home/Index/1,当前控制器的锚 url(在面包屑侧)变得像来自浏览器的 url(相同的值, http://localhost:1234/Home/Index/1)。

是否可以像 Global.asax 中那样自动删除 url 参数集 UrlParameter.Optional,以便不在锚 url 中显示?

id很简单,我有很多路由和可选的 url 参数的不同名称

谢谢

4

1 回答 1

0

你不能在 global.asax 中做到这一点。Yo 不能以这种方式更改方法行为。这没有任何意义:您的应用程序将按预期停止工作。

但是,您可以使用此重载 os GenerateUrl提供一个空的 RouteValueDictionary。通过这种方式,您可以摆脱当前的路由数据(其中包括当前的请求参数,例如 url 中的 id)。

public static string GenerateUrl(
    string routeName,
    string actionName,
    string controllerName,
    RouteValueDictionary routeValues,
    RouteCollection routeCollection,
    RequestContext requestContext,
    bool includeImplicitMvcValues
)

这将为您提供一个 URL,您可以使用该 URL 创建您的操作链接。

于 2013-10-09T16:11:56.600 回答