Atributo necessário para o tipo de valor BOOL quando usado como caixa de seleção

StackOverflow https://stackoverflow.com/questions/2208444

  •  18-09-2019
  •  | 
  •  

Pergunta

Estou enfrentando um problema em que tenho um formulário de adição/edição simples e usando a validação do lado do cliente (jQuery/MicrosoftMVCJQueryValidation.js), que é gerado a partir de anotações de dados e ativado pelo lado do cliente ligando para o seguinte na minha visão:

<% Html.EnableClientValidation(); %>

Isso parece funcionar bem para a maioria dos elementos, no entanto, tenho uma instância em que tenho uma propriedade booleana que é renderizada como uma caixa de seleção usando:

<%= Html.EditorFor(model => model.Chargeable)%>

Que pode ser verdadeiro/falso (marcado/desprovido).

Como o bool é um tipo de valor e não é anulável, ele está sendo renderizado como uma propriedade necessária e exibe um erro (lado do cliente) quando o formulário é submetido lendo "O campo cobrável é necessário". No entanto, como o HTML que é Gerado é duas partes (caixa de seleção e valor oculto), ele passará na validação da postagem.

Depois de navegar no código -fonte do MVC 2, consegui colocar uma solução "rápida e suja" no momento, que é definir:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Alguém mais teve alguma idéia ou sugestão sobre como posso contornar isso?

IMO, acho que o MVC não deve definir o validador necessário para as caixas de seleção renderizadas usando os métodos html.editorfor/html.checkbox (para).

NOTA: Estou usando o ASP.NET MVC 2 RC2 e o MicrosoftMVCJQueryValidation.js a partir da versão Futures do MVC correspondente.

Foi útil?

Solução

Suponho que a maneira mais fácil de lidar com isso é chamar a função Regras ("Remover", [Regras]) nos elementos (principalmente caixas de seleção) que eu quero remover a validação do lado do cliente de:

<script type="text/javascript">
  $(document).ready(function() {
    $('#Chargeable').rules('remove', 'required');
  });
</script>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top