繁体   English   中英

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

[英]How to remove automatically a url parameter (set as UrlParameter.Optional in global.asax) when using ActionLink method in MVC4?

我有一个小问题:

假设我具有以下路由设置(默认设置), 但我还有更多其他路由,它们具有不同的可选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 )。

可以自动删除设置为UrlParameter.Optional url参数UrlParameter.Optional中的UrlParameter.Optional参数,以便不显示在锚定url中?

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

谢谢

您无法在global.asax中执行此操作。 不能以这种方式更改方法行为。 这没有任何意义:您的应用将无法按预期运行。

但是,您可以使用此重载os GenerateUrl提供空的RouteValueDictionary。 这样,您就可以摆脱当前的路线数据(包括当前的请求参数,例如url中的ID)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM