I'm VERY confused as to why this code
Html.ActionLink("About", "About", "Home", new { hidefocus = "hidefocus" })
results in this link:
<a hidefocus="hidefocus" href="/Home/About?Length=4">About</a>
The hidefocus
part is what I was aiming to achieve, but where does the ?Length=4
come from?
You forgot to add the HTMLAttributes parm.
This will work without any changes:
Just remove "Home" (name of the controller) so that the code would be:
The Length=4 is coming from an attempt to serialize a string object. Your code is running this
ActionLink
method:This takes a
string
object "Home" for routeValues, which the MVC plumbing searches for public properties turning them into route values. In the case of astring
object, the only public property isLength
, and since there will be no routes defined with a Length parameter it appends the property name and value as a query string parameter. You'll probably find if you run this from a page not onHomeController
it will throw an error about a missingAbout
action method. Try using the following:Kindly use right overloaded method with five (5) parameters. Example:
As Jonathon Watney pointed out in a comment, this also goes for
methods. In my case, I was in a Create.cshtml targeting the post request of the corresponding controller + Create action and had
which was adding the querystring "?Length=6" to the form action when rendered. Hinted by roryf's approved answer and realizing the string length of "Create" is 6, I finally solved this by removing the explicit action specification:
The parameters to ActionLink are not correct, it's attempting to use the "Home" value as a route value, instead of the anonymous type.
I believe you just need to add
new { }
ornull
as the last parameter.EDIT: Just re-read the post and realized you'll likely want to specify null as the second last parameter, not the last.