Jak określić atrybuty danych w maszynce do golenia, np. Data-externalid = „23151” w @ this.Html.CheckBoxFor (…)

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

W przypadku maszynki do golenia nie mogę określić wartości atrybutów danych, takich jak data-externalid="23521"

Czy istnieje sposób, aby to zrobić za pomocą @this.Html.CheckBoxFor(...)?

Ian Davis
źródło

Odpowiedzi:

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

W wynikowym znaczniku _zostanie automatycznie przekonwertowany na -:

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

Dotyczy to wszystkich pomocników HTML, którzy htmlAttributesjako argument przyjmują anonimowy obiekt, a nie tylko CheckBoxForpomocnika.

Darin Dimitrov
źródło
4
wow, widzę, że konwersja '_' '-' jest naprawdę myląca ... zwłaszcza jeśli ktoś wyszukuje ciąg znaków w poszukiwaniu danego atrybutu danych. Czy jest inny sposób?
RayLoveless
5
Po prostu przekształć to: new {data_test = "true"}) -> new Dictionary <string, object> {{"data-test", "true"}});
Dominique Alexandre
1
A jeśli chcesz, aby wartość pochodziła z Twojego ViewModel; new { @class = "myCheckBox", data_externalid = Model.ExternalId }Przyszedłem po pomoc w tym temacie i tego właśnie potrzebowałem. :)
Scott Fraley
Ponad 8 lat później ta odpowiedź bardzo mi pomogła. Nie mogłem zrozumieć, dlaczego dodanie mojego tagu v-model formularza vue nie działa. Zamiast tego musiałem użyć v_model = "bla".
Andrew Junior Howard