¿Por qué Html.ActionLink representa "? Longitud = 4"

Resuelto My Alter Ego asked hace 15 años • 12 respuestas

Estoy MUY confundido en cuanto a por qué este código

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

resultados en este enlace:

<a hidefocus="hidefocus" href="/Home/About?Length=4">About</a>

La hidefocusparte es lo que pretendía lograr, pero ¿de dónde viene ?Length=4?

My Alter Ego avatar May 05 '09 17:05 My Alter Ego
Aceptado

La Longitud = 4 proviene de un intento de serializar un objeto de cadena. Su código ejecuta este ActionLinkmétodo:

public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, object htmlAttributes)

Esto toma un stringobjeto "Inicio" para routeValues, que la plomería MVC busca propiedades públicas convirtiéndolas en valores de ruta. En el caso de un stringobjeto, la única propiedad pública es Lengthy, dado que no habrá rutas definidas con un parámetro Longitud, agrega el nombre y el valor de la propiedad como un parámetro de cadena de consulta. Probablemente encontrará que si ejecuta esto desde una página que no está en ella, HomeControllerse generará un error sobre un Aboutmétodo de acción faltante. Intente usar lo siguiente:

Html.ActionLink("About", "About", new { controller = "Home" }, new { hidefocus = "hidefocus" })
roryf avatar May 05 '2009 10:05 roryf

La forma en que resolví esto fue agregando un valor nulo al cuarto parámetro antes de la declaración anónima ( new {}) para que use el siguiente método de sobrecarga: (texto de enlace, nombre de acción, nombre de controlador, valores de ruta, atributos html):

Html.ActionLink("About", "About", "Home", null, new { hidefocus = "hidefocus" })
Manuel Castro avatar Nov 02 '2010 19:11 Manuel Castro

Olvidó agregar el parámetro HTMLAttributes.

Esto funcionará sin ningún cambio:

Html.ActionLink("About", "About", "Home", new { hidefocus = "hidefocus" },null)
Jesse Rose avatar May 26 '2012 20:05 Jesse Rose