2011-02-03 19 views
28

Tengo un problema al tratar de agregar un atributo de datos HTML5 personalizado a la tabla que se representa con el ayudante WebGrid. Quiero que la mirada etiqueta de la tabla de la siguiente manera:Agregar un guion al nombre de atributo html utilizando MVC3 WebGrid helper

<table data-test="testdata"><!-- Table Content --></table> 

Aquí es una vista de la muestra mediante la vista de motor de la maquinilla de afeitar:

@{ 
    var myUser = new 
    { 
     Id = 1, 
     Name = "Test User" 
    }; 

    var users = new[] { myUser }; 

    var grid = new WebGrid(users); 
} 
@grid.GetHtml(htmlAttributes: new { data-test = "testdata"}) 

La última línea producirá una "declarador miembro de tipo anónimo no válida." error, debido al guión en la prueba de datos.

Con algunas de las otras HtmlHelpers de entrada, puede utilizar un guión bajo en lugar del guión y se cambiará automáticamente a un guión cuando se represente. Esto no ocurre con WebGrid.

Si paso en un diccionario de htmlAttributes:

@grid.GetHtml(htmlAttributes: new Dictionary<string, object> {{ "data-test", "testdata"}}) 

la tabla se representa como tales:

<table Comparer="System.Collections.Generic.GenericEqualityComparer`1[System.String]" Count="1" Keys="System.Collections.Generic.Dictionary`2+KeyCollection[System.String,System.Object]" Values="System.Collections.Generic.Dictionary`2+ValueCollection[System.String,System.Object]"><!-- Table Content --></table> 

¿qué estoy haciendo mal y qué debería hacer rendir el atributo según se desee?

+0

¿Qué sucede cuando pones '@' delante del nombre de tu atributo? si desea agregar un atributo de clase, debe escribir '@ class' porque' class' es especial, ¿esto también se aplicaría a su atributo especial? –

+0

Poner @ al frente tiene el mismo comportamiento que no tenerlo allí. –

Respuesta

43

Me temo que esto no es posible. Por desgracia, la WebGrid no es compatible con la misma sintaxis que helper HTML estándar, como TextBoxFor donde podía:

@Html.TextBoxFor(x => x.SomeProp, new { data_test = "testdata" }) 

y el guión sería automáticamente convertido al guión.

+12

Lamentablemente, no funciona con Html.BeginForm(), así que tuvimos que hacerlo de esta manera @using (Html.BeginForm ("vista", "controlador", FormMethod.Post, nuevo Diccionario {{"data- test "," testdata "}})) – Korayem

+0

awesome dude :) –

Cuestiones relacionadas