如何在MVC4中使用ActionLink方法时自动删除url参数(在global.asax中设置为UrlParameter.Optional)?

时间:2013-10-09 15:37:08

标签: c# asp.net-mvc-4

我有一点问题:

让'假设我有以下路由设置(默认)但我有更多其他路由具有不同的可选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很简单,我有许多路线和可选网址参数的不同名称

由于

1 个答案:

答案 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
)

这会为您提供一个可以创建操作链接的网址。