2012-05-08 19 views
5

Espero que esto sea solo un error, pero pensé que tal vez era solo yo.MVC 4 ActionLink Dictionary htmlAttributes no funciona

@Html.ActionLink("Test", "Test", "Test", 
    new { id = 1 }, 
    new Dictionary<string, object> { { "class", "ui-btn-test" }, { "data-icon", "gear" } }) 

Esto funciona, pero si quisiera agregar más atributos, ¡tengo que hacerlo manualmente!

@Html.ActionLink("Test", "Test", "Test", 
    new { id = 1 }, 
    new { @class="ui-btn-test", data_icon="gear", data_new_attr="someextra" }) 

El primero ya no funciona y necesito que este funcione. El segundo funciona, pero no importa que lo haga, porque estoy tratando de agregar más atributos, el objeto no funcionará a menos que se lo indique de otra manera.

+0

¿Cuál es la pregunta? La segunda forma es la preferida para especificar 'htmlAttributes'. –

+0

En MVC 4, la primera opción que prefiero no funciona correctamente. Obtengo algo así como los atributos. Home

+0

¿Por qué querrías hacerlo de la primera manera? La segunda forma funciona, es práctica aceptada y es más fácil de leer. –

Respuesta

8

Ninguno de los métodos de ayuda proporcionados ActionLink acepta parámetros como los que especifica. Los únicos que toman un parámetro de tipo IDictionary para los atributos html esperan un RouteValueDictionary para los valores de ruta. Tal como es, actualmente está llamando a una función que está tratando a su diccionario como un objeto anónimo

Trate

@Html.ActionLink("Test", "Tesz", "Test", 
new RouteValueDictionary(new {id = 1}), 
new Dictionary<string, object> { { "class", "ui-btn-test" }, { "data-icon", "gear" } }) 

o implementar su propio método de extensión.

+0

¡Funcionó muy bien! Estaba a punto de implementar mi propio método de extensión, pero no quería volver a escribir todos mis enlaces de acción. –

Cuestiones relacionadas