Atributo necessário para o tipo de valor BOOL quando usado como caixa de seleção
-
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.
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>