Se eu conseguir jogar meu chapéu no ringue, acho que há uma maneira mais limpa do que as respostas existentes de reutilizar a funcionalidade dos botões de opção.
Digamos que você tenha a seguinte propriedade no seu ViewModel :
Public Class ViewModel
<Display(Name:="Do you like Cats?")>
Public Property LikesCats As Boolean
End Class
Você pode expor essa propriedade através de um modelo de editor reutilizável :
Primeiro, crie o arquivo Views/Shared/EditorTemplates/YesNoRadio.vbhtml
Em seguida, adicione o seguinte código ao 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>
Você pode chamar o editor para a propriedade especificando manualmente o nome do modelo em sua Visualização :
@Html.EditorFor(Function(model) model.LikesCats, "YesNoRadio")
Prós:
- Comece a escrever HTML em um editor de HTML em vez de anexar seqüências de caracteres no código por trás.
- Preserva o DisplayName DataAnnotation
- Permite que cliques no rótulo alternem o botão de opção
- Menos código possível para manter no formulário (1 linha). Se algo estiver errado com a forma como está renderizando, aceite o modelo.