2012-03-06 15 views
8

Según this question, se supone que tengo que ser capaz de escribir algo como esto:¿Se ha roto el uso de los atributos HTML-5 data- * en ASP.NET MVC 4 (beta)?

@Html.ActionLink("Delete", "Delete", "Message", new { data_id=id, @class="delete" }) 

o como un usuario feliz T4MVC puede hacer:

@Html.ActionLink("Delete", MVC.Message.Actions.Delete(), new { data_id=id, @class="delete" }) 

y obtener el subrayado en "data_id" reemplazado durante la representación:

<a href="/message/delete" class="delete" data-id="42">Delete</a> 

Sin embargo, esto parece no funcionar en la MVC 4 beta. ¿Alguien más está viendo este problema?

¿Es un cambio intencional, y si es así, qué debo hacer en su lugar?

ACTUALIZACIÓN - Cómo corregir (manual)

he aplicado los siguientes cambios en el archivo T4MVC.tt, que soluciona el problema en el código generado:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, ActionResult result, object htmlAttributes, string protocol = null, string hostName = null, string fragment = null) { 
    //was: return ActionLink(htmlHelper, linkText, result, new RouteValueDictionary(htmlAttributes), protocol, hostName, fragment); 
    return htmlHelper.RouteLink(linkText, null, protocol, hostName, fragment, result.GetRouteValueDictionary(), HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); 
} 

ACTUALIZACIÓN 2 - CORREGIR DISPONIBLE

David Ebbo fue rapidísimo al responder a the reported issue y ya ha combinado el arreglo anterior en T4MVC.

ACTUALIZACIÓN 3 - fijar el FIX

bastante embarazosamente, el arreglo original presentado de hecho no funciona, ya que todavía se llama una sobrecarga válida. Ahora modifiqué el código para hacer lo mismo que MVC internamente (usando su método de ayuda) y notifiqué a David que lo incluyera en T4MVC. Tome 2.6.70 de codeplex o actualice usando NuGet cuando se publique, probablemente en breve.

+0

Prefiero escribir Delete directamente .. @ Html.ActionLink() no es compatible con la interfaz de usuario. –

+0

Pero tampoco lo es

Respuesta

5

Trate

@Html.ActionLink("Delete", "Delete", "Message", null, new { data_id=id, @class="delete" })

creo que becuase de todas las sobrecargas está asumiendo su cuarto parámetro es el parámetro routeValues.

+0

Sí, creo que esta es la respuesta correcta. Tengo atributos data- * trabajando en mi proyecto MVC4, pero muchas veces Fallé sobrecarga muchas veces. – kaveman

+0

Esa es una sugerencia sensata, pero en realidad estoy usando una extensión T4MVC que toma un ActionResult, y esto no tiene sobrecarga para la ruta valores (todo está contenido en ActionResult). Por lo tanto, estoy seguro de que de hecho estoy pasando la variable al parámetro htmlAttributes. Publicación actualizada para mostrar cómo realmente la uso (simplemente no quería confundir la imagen con T4MVC). –

+0

Oye, quién sabía. Tienes razón. T4MVC debe invocar la sobrecarga incorrecta en MVC4. ¡Gracias! –

Cuestiones relacionadas