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?
Solution
The Length=4 is coming from an attempt to serialize a string object. Your code is running this
ActionLink
method:public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, object htmlAttributes)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:Html.ActionLink("About", "About", new { controller = "Home" }, new { hidefocus = "hidefocus" })