asp.net mvc Html.ActionLink()保持路线的价值,我不想要的
在我看来,我有以下的ActionLink
<%= Html.ActionLink("LinkText", "Action", "Controller"); %>
并创build以下URL http://mywebsite.com/Controller/Action
假设我在最后添加了一个ID: http : //mywebsite.com/Controller/Action/53并导航到页面。 在这个页面上我有上面指定的标记。 现在,当我查看它创build的URL时,它看起来像这样:
http://mywebsite.com/Controller/Action/53 (注意添加ID)
但我想要它删除ID,看起来像它原来的,就像这个http://mywebsite.com/Controller/Action (在这里通知没有ID)
任何想法如何我可以解决这个问题? 我不想使用硬编码的URL,因为我的控制器/操作可能会改变。
解决scheme是指定我自己的路由值(下面的第三个参数)
<%= Html.ActionLink("LinkText", "Action", "Controller", new { id=string.Empty }, null) %>
这听起来像你需要注册第二个“仅行动”路线,并使用Html.RouteLink()。 首先在你的应用程序启动时注册一个这样的路由:
routes.MapRoute("ActionOnly", "{controller}/{action}", new { controller = "Home", action = "Index" } );
然后,而不是ActionLink来创build这些链接使用:
Html.RouteLink("About","ActionOnly")
问题在于内置的方法从您当前所在的URL中获取input以及提供的内容。 你可以试试这个:
<%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>
这应该手动擦拭ID参数。
不知道为什么,但它不适合我(也许是因为Mvc2 RC)。 创buildurlhelper方法=>
public static string WithoutRouteValues(this UrlHelper helper, ActionResult action,params string[] routeValues) { var rv = helper.RequestContext.RouteData.Values; var ignoredValues = rv.Where(x=>routeValues.Any(z => z == x.Key)).ToList(); foreach (var ignoredValue in ignoredValues) rv.Remove(ignoredValue.Key); var res = helper.Action(action); foreach (var ignoredValue in ignoredValues) rv.Add(ignoredValue.Key, ignoredValue.Value); return res; }
如果你不知道什么值需要被显式覆盖,或者你只是想避免额外的参数列表,你可以使用下面的扩展方法。
<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>
实施细节在这篇博客文章
我明确地将操作名称设置为“Action /”。 看起来有点像黑客,但它是一个快速修复。
@Html.ActionLink("Link Name", "Action/", "Controller")
另一种方法是使用ActionLink(HtmlHelper,String,String,RouteValueDictionary)重载,那么就不需要在最后一个参数中加null
<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
我需要我的菜单链接是dynamic的。 我没有为每一个页面实现大量额外的代码和路由,而是简单地放弃了HTML帮助器。
<a href="@(item.websiteBaseURL)/@(item.controller)/@(item.ViewName)">@item.MenuItemName</a>
Html.ActionLink的重载在MVC的更高版本上被改变。 在MVC 5及以上。 这是如何做到这一点:
@Html.ActionLink("LinkText", "Action", "Controller", new { id = "" }, null)
注意我通过“”为id参数和null为HTMLATTRIBUTES。