Jeśli mogę wyrzucić mój kapelusz na ring, myślę, że jest bardziej przejrzysty sposób niż istniejących odpowiedzi na ponowne wykorzystanie funkcjonalności przycisku radiowego.
Powiedzmy masz następującą właściwość w swoim ViewModel:
Public Class ViewModel
<Display(Name:="Do you like Cats?")>
Public Property LikesCats As Boolean
End Class
można odsłonić tę właściwość przez wielokrotnego użytku editor template:
Najpierw utwórz plik Views/Shared/EditorTemplates/YesNoRadio.vbhtml
Następnie dodać następujący kod: YesNoRadio.vbhtml:
@ModelType Boolean?
<fieldset>
<legend>
@Html.LabelFor(Function(model) model)
</legend>
<label>
@Html.RadioButtonFor(Function(model) model, True) Yes
</label>
<label>
@Html.RadioButtonFor(Function(model) model, False) No
</label>
</fieldset>
Można wywołać edytor właściwości ręcznie podając nazwę szablonu w View:
@Html.EditorFor(Function(model) model.LikesCats, "YesNoRadio")
Plusy:
- Get napisać HTML w edytorze HTML zamiast dołączania ciągów w kodzie za.
- zachowuje NazwaWyświetlana DataAnnotation
- Pozwala kliknie na etykiecie, aby włączyć przycisk radiowy
- najmniejszym możliwym kod do utrzymania w postaci (1 linia). Jeśli coś jest nie tak ze sposobem renderowania, weź go za pomocą szablonu.
"Problem" z tymi rozwiązaniami (i używam stylu Ben Cull w moim projekcie) polega na tym, że nie można z nimi tworzyć etykiet. Oba wejścia przycisku radiowego będą miały ten sam identyfikator i nazwę, więc jeśli użyjesz Html.LabelFor, połączy on pierwsze wejście przycisku radiowego w DOM z tym identyfikatorem. Tak jak mówiłem, używam tego rozwiązania dla przycisków radiowych do reprezentowania pola logicznego, po prostu chciałem, aby ludzie wiedzieli, że etykiety będą nieco nieporęczne. – Gromer
Zobacz odpowiedź Jeffa Bobisha, aby sprawdzić, jak rozwiązać problem z etykietą elegancko. –