Asp.net mvc 4 Html.ActionLink错误地拾取当前RouteValue

Asp.net mvc 4 Html.ActionLink错误地拾取当前RouteValue,asp.net-mvc-4,Asp.net Mvc 4,所以我有一个路线(例如~/Help/FAQ)。现在,如果我在FAQ以外的任何页面上,Html.ActionLink的工作方式与我预期的一样 @Html.ActionLink("FAQ", "FAQ", "Help", routeValues:=Nothing, htmlAttributes:=Nothing) 但是如果当前浏览器URL是指定了id route属性的FAQ页面,http://www.example.com/Help/FAQ/56832,然后,上面的ActionLink拾取当前ro

所以我有一个路线(例如~/Help/FAQ)。现在,如果我在FAQ以外的任何页面上,
Html.ActionLink
的工作方式与我预期的一样

@Html.ActionLink("FAQ", "FAQ", "Help", routeValues:=Nothing, htmlAttributes:=Nothing)
但是如果当前浏览器URL是指定了id route属性的FAQ页面,
http://www.example.com/Help/FAQ/56832
,然后,上面的ActionLink拾取当前routeValues并呈现带有
56832
附件的链接-尽管我特别告诉ActionLink我不希望呈现任何routeValues


这是一个bug还是我做错了什么?

如果您没有做错任何事情,ASP.NET MVC会隐式使用HTML帮助程序中的当前路由值。您必须覆盖它们:

在C#中:

在VB.NET中:

@Html.ActionLink("FAQ", "FAQ", Help", routeValues:= New With {.id = Nothing}, htmlAttributes:=Nothing)

虽然没有指定OP实际上使用的是VB.NET,但请更新您的答案。@jacqijvv已完成,但我自己对VB.NET不熟悉。也许有人可以验证。这是正确的语法,下面是另一个堆栈溢出的示例。希望这能有所帮助。@jacqijvv:我故意在这个问题上不使用语言。该行为存在于所有语言中,任何语言的解决方案/答案都是可以接受的。这个问题本身与VB无关,事实上与语言无关。我完全不同意你的看法。
@Html.ActionLink(“FAQ”,“FAQ”,“Help”,routeValues:=New with{.id=nothing},htmlAttributes:=nothing)
在语法上与
@Html.ActionLink(“FAQ”,“FAQ”,“Help”,New{id=null},null)不同
。人们来这里学习,并获得问题的答案,重要的是我们至少要保持一致。
@Html.ActionLink("FAQ", "FAQ", Help", routeValues:= New With {.id = Nothing}, htmlAttributes:=Nothing)