Atributo requerido para el tipo de valor bool cuando se utiliza como casilla de verificación

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

  •  18-09-2019
  •  | 
  •  

Pregunta

Estoy corriendo en un problema en el que tengo una forma sencilla de añadir / editar y utilizando la validación del lado del cliente (jQuery / MicrosoftMvcJQueryValidation.js), que se genera a partir de las anotaciones de datos y activar el lado del cliente, llamando al siguiente en mi punto de vista:

<% Html.EnableClientValidation(); %>

Esto parece funcionar bien para la mayoría de los elementos, sin embargo tengo una instancia donde tengo una propiedad booleana que se representa como una casilla de verificación usando:

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

que puede ser verdadero / falso (marcado / sin marcar).

A medida que el bool es un tipo de valor, y no anulable, que se representa como una propiedad necesaria y muestra un (lado del cliente) de error cuando se envía el formulario de lectura "Se requiere que el campo de pago." Sin embargo, como el HTML que se genera es de dos partes (ambos casilla de verificación y el valor oculto) que va a pasar el segundo palo de validación.

Después de navegar por el código fuente MVC 2, he conseguido poner un "rápido y sucio" arreglar en el momento, que consiste en establecer:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Cualquier otra persona tiene alguna idea o sugerencia sobre cómo puedo evitar esto?

OMI, no creo MVC debe estar preparando el validador requiere del lado del cliente para casillas de verificación prestados utilizando los métodos Html.EditorFor / Html.Checkbox (Para).

Nota:. Estoy usando el 2 RC2 ASP.NET MVC y las MicrosoftMvcJQueryValidation.js de la liberación MVC Futuros a juego

¿Fue útil?

Solución

supongo que la forma más fácil de manejar que es llamar a las reglas ( "eliminar", [normas]) la función de los elementos (principalmente casillas de verificación) que desea eliminar la validación en el cliente de:

<script type="text/javascript">
  $(document).ready(function() {
    $('#Chargeable').rules('remove', 'required');
  });
</script>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top