Comment spécifier des attributs de données dans razor, par exemple, data-externalid = "23151" sur @ this.Html.CheckBoxFor (…)

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

Avec le rasoir, je ne peux pas spécifier de valeurs pour les attributs de données tels que data-externalid="23521"

Y a-t-il un moyen de faire cela en utilisant @this.Html.CheckBoxFor(...)?

Ian Davis
la source

Réponses:

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

Le _sera automatiquement converti en -dans le balisage résultant:

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

Et c'est vrai pour tous les helpers Html prenant un htmlAttributesobjet anonyme comme argument, pas seulement l' CheckBoxForassistant.

Darin Dimitrov
la source
4
wow, je peux voir que la conversion '_' '-' est vraiment déroutante ... surtout si quelqu'un fait une recherche de chaîne à la recherche d'un attribut de données donné. Y a-t-il un autre moyen?
RayLoveless
5
Transformez simplement ceci: new {data_test = "true"}) -> new Dictionary <string, object> {{"data-test", "true"}});
Dominique Alexandre
1
Et si vous avez besoin que la valeur provienne de votre ViewModel; new { @class = "myCheckBox", data_externalid = Model.ExternalId }Je suis venu chercher de l'aide sur ce sujet et c'était ce dont j'avais besoin. :)
Scott Fraley
Plus de 8 ans plus tard, cette réponse vient de m'aider massivement. Je ne pouvais pas comprendre pourquoi l'ajout de ma balise vue form v-model ne fonctionnerait pas. J'ai dû utiliser v_model = "blah" à la place.
Andrew Junior Howard