Cómo especificar atributos de datos en razor, por ejemplo, data-externalid = "23151" en @ this.Html.CheckBoxFor (…)

122
@this.Html.CheckBoxFor(m => m.MyModel.MyBoolProperty, new { @class="myCheckBox", extraAttr="23521"})

Con razor, no puedo especificar valores para atributos de datos como data-externalid="23521"

¿Hay alguna forma de hacer esto usando @this.Html.CheckBoxFor(...)?

Ian Davis
fuente

Respuestas:

268
@Html.CheckBoxFor(
    m => m.MyModel.MyBoolProperty, 
    new { 
        @class = "myCheckBox", 
        data_externalid = "23521"
    }
)

El _se convertirá automáticamente en -en el marcado resultante:

<input type="checkbox" name="MyModel.MyBoolProperty" data-externalid="23521" class="myCheckBox" />

Y eso es cierto para todos los ayudantes Html que toman un htmlAttributesobjeto anónimo como argumento, no solo el CheckBoxForayudante.

Darin Dimitrov
fuente
4
wow, puedo ver que la conversión '_' '-' es realmente confusa ... especialmente si alguien hace una búsqueda de cadena buscando un atributo de datos dado. ¿Hay otra manera?
RayLoveless
5
Simplemente transforme esto: new {data_test = "true"}) -> new Dictionary <string, object> {{"data-test", "true"}});
Dominique Alexandre
1
Y si necesita que el valor provenga de su ViewModel; new { @class = "myCheckBox", data_externalid = Model.ExternalId }Vine a buscar ayuda sobre este tema y esto era lo que necesitaba. :)
Scott Fraley
Más de 8 años después, esta respuesta me ha ayudado enormemente. No pude entender por qué agregar mi etiqueta vue form v-model no funcionaría. Tuve que usar v_model = "blah" en su lugar.
Andrew Junior Howard