Html5 data- * con asp.net mvc Textbox para atributos html

244

¿Cómo agrego data-*atributos html con TextboxFor?

Esto es lo que tengo actualmente:

@Html.TextBoxFor(model => model.Country.CountryName, new { data-url= Url.Action("CountryContains", "Geo") })

Como puede ver, aquí -está causando un problema data-url. ¿Cuál es la forma de evitar esto?

Shawn Mclean
fuente
posible duplicado de atributos html con guión con asp.net mvc
ED-209

Respuestas:

417

Puede usar el subrayado ( _) y el ayudante es lo suficientemente inteligente como para hacer el resto:

@Html.TextBoxFor(
    model => model.Country.CountryName, 
    new { data_url = Url.Action("CountryContains", "Geo") }
)

Y para aquellos que quieran lograr lo mismo en versiones anteriores a ASP.NET MVC 3, podrían:

<%= Html.TextBoxFor(
    model => model.Country.CountryName, 
    new Dictionary<string, object> { 
        { "data-url", Url.Action("CountryContains", "Geo") } 
    }
) %>
Darin Dimitrov
fuente
8
¿Este comportamiento se especifica en alguna parte :)?
Rookian
55
@ Ryan, no, porque no tiene sentido trabajar para él EditorFor. El asistente EditorFor se usa para representar una plantilla HTML personalizada que corresponde al tipo dado. Una plantilla puede contener muchos elementos, por lo que hablar de atributos en una plantilla realmente no tiene sentido. Por supuesto, siempre podría escribir una plantilla personalizada que funcione con el additionalViewDataparámetro que podría pasarse a una plantilla de editor y simplemente generarlos como atributos en el campo de entrada correspondiente.
Darin Dimitrov
2
Para ser claros, el marcado resultante tiene un guión bajo y no un guión. La oración "Podrías usar el guión bajo (_) y el ayudante es lo suficientemente inteligente como para hacer el resto", específicamente la parte sobre la supuesta inteligencia me hizo creer que se convertiría automáticamente, pero no lo hace. HTML5 soporta -.
Alan Macdonald
2
@AlanMacdonald the _se convierte -en versiones anteriores (¿medias?) De MVC. Puede ser que las versiones más recientes lo hayan eliminado, pero lo estoy usando con éxito en MVC 3 y 4.
brichins
44
@AlanMacdonald (y otros que leen), también _se convierte -en MVC 5. Lo estoy usando con éxito en un proyecto en el que estoy trabajando actualmente, que usa MVC 5.
Amy Barrett