Alguém sabe como vincular um botão de opção Sim / Não a uma propriedade booleana de um Modelo fortemente tipado no ASP.NET MVC.
Modelo
public class MyClass
{
public bool Blah { get; set; }
}
Visão
<%@ Page Title="blah" Inherits="MyClass"%>
<dd>
<%= Html.RadioButton("blah", Model.blah) %> Yes
<%= Html.RadioButton("blah", Model.blah) %> No
</dd>
obrigado
SOLUÇÃO:
Obrigado por Brian pela direção, mas foi o oposto do que ele escreveu. Como assim -
<%@ Page Title="blah" Inherits="MyClass"%>
<dd>
<%= Html.RadioButton("blah", !Model.blah) %> Yes
<%= Html.RadioButton("blah", Model.blah) %> No
</dd>
c#
asp.net-mvc
model
radio-button
boolean
brianstewey
fonte
fonte
Respostas:
O segundo parâmetro está selecionado, então use o! para selecionar o valor no quando o booleano for falso.
fonte
Se você estiver usando o MVC 3 e o Razor, também poderá usar o seguinte:
fonte
Aqui está um exemplo mais completo usando a
fieldset
por razões de acessibilidade e especificando o primeiro botão como padrão. Sem afieldset
, para que servem os botões de opção como um todo, não pode ser determinado programaticamente.Modelo
Visão
Você pode adicionar um
@checked
argumento ao objeto anônimo para definir o botão de opção como padrão:Observe que você pode vincular a uma sequência substituindo
true
efalse
pelos valores da sequência.fonte
Construindo um pouco da resposta de Ben, adicionei atributos para o ID para poder usar rótulos.
Eu espero que isso ajude.
fonte
Adicionar tags de etiqueta nos botões de opção usando HTML comum também corrigirá o problema 'labelfor':
Clicar no texto agora seleciona o botão de opção apropriado.
fonte
ou MVC 2.0:
fonte
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 :
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 :
Você pode chamar o editor para a propriedade especificando manualmente o nome do modelo em sua Visualização :
Prós:
fonte
Acabei empacotando isso em um método de extensão para (1) gerar o rótulo e o rádio de uma só vez e (2) para não ter que me preocupar em especificar meus próprios IDs:
Uso:
fonte