Why does Html.ActionLink render "?Length=4"

asp.net-mvc

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 a `string` object, the only public property is `Length`, 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 on `HomeController` it will throw an error about a missing `About` action method. Try using the following:

Html.ActionLink("About", "About", new { controller = "Home" }, new { hidefocus = "hidefocus" })

Problem

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?

Original source