我在视图中有以下ActionLink
<%= Html.ActionLink("LinkText", "Action", "Controller"); %>
并创建以下网址http://mywebsite.com/Controller/Action
假设我最后添加了一个ID,如下所示:http://mywebsite.com/Controller/Action/53并导航到该页面。在这个页面上,我有上面指定的标记。现在,当我查看它创建的URL时,它看起来像这样:
http://mywebsite.com/Controller/Action/53(注意添加ID)
但是我希望它删除ID并看起来像它原来的那样http://mywebsite.com/Controller/Action(注意这里没有ID)
我有什么想法可以解决这个问题?我不想使用硬编码的URL,因为我的控制器/操作可能会改变。
答案 0 :(得分:44)
解决方案是指定我自己的路线值(下面的第三个参数)
<%= Html.ActionLink("LinkText", "Action", "Controller",
new { id=string.Empty }, null) %>
答案 1 :(得分:13)
听起来您需要注册第二个“仅限操作”路线并使用Html.RouteLink()。首先在应用程序启动时注册这样的路由:
routes.MapRoute("ActionOnly", "{controller}/{action}",
new { controller = "Home", action = "Index" } );
然后使用以下代替ActionLink来创建这些链接:
Html.RouteLink("About","ActionOnly")
答案 2 :(得分:10)
问题是内置方法从您当前使用的URL以及您提供的内容中获取输入。你可以试试这个:
<%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>
那应该手动擦除id参数。
答案 3 :(得分:4)
不知道为什么,但它对我不起作用(也许是因为Mvc2 RC)。创建了urlhelper方法=&gt;
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;
}
答案 4 :(得分:4)
如果您不知道需要显式覆盖哪些值,或者您只是想避免额外的参数列表,您可以使用如下所示的扩展方法。
<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>
实施细节为in this blog post
答案 5 :(得分:4)
我明确地将操作名称设置为“Action /”。看起来有点像黑客,但它是一个快速修复。
@Html.ActionLink("Link Name", "Action/", "Controller")
答案 6 :(得分:2)
另一种方法是使用ActionLink(HtmlHelper,String,String,RouteValueDictionary)重载,然后不需要在最后一个参数中放入
<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
答案 7 :(得分:1)
在更高版本的MVC上更改了Html.ActionLink的重载。在MVC 5及以上版本。这是怎么做的:
@Html.ActionLink("LinkText", "Action", "Controller", new { id = "" }, null)
注意我通过了#34;&#34;对于id参数,对于HTMLATTRIBUTES为null。
答案 8 :(得分:0)
我需要我的菜单链接是动态的。我没有为每一页实现大量额外的代码和路由,而是简单地省去了HTML帮助程序。
<a href="@(item.websiteBaseURL)/@(item.controller)/@(item.ViewName)">@item.MenuItemName</a>