validationmessagefor net mvc for dataannotations data custom bootstrap asp annotation asp.net-mvc validation model

asp.net mvc - net - ¿Cómo agregar un atributo booleano requerido en mvc?



model validation c# (3)

Tengo una clase modelo como:

public class Student { [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] [Display(Name = "Enrollment Date")] public DateTime EnrollmentDate { get; set; } [Required] [Display(Name = "Is Active")] public bool IsActive { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } }

Aquí he creado una propiedad Boolean IsActive con atributo Required , pero el problema es que mi vista no está ejecutando la validación requerida para esta propiedad. Quiero vincular esta propiedad con un CheckBox y verificar si este CheckBox está marcado y ejecutar la validación si no lo está.

¿Alguna solución para esto?


Déjame añadir un poco a la publicación de Sonu K

Si usa la validación HTML en él ( <input type="checkbox" required/> ) podría terminar interrumpiendo su javascript para evitar que envíe un campo de campo obligatorio de su Modelo

Finalmente, si no desea que se agregue el Is Active a la base de datos cuando realice la migración (primero el código), agregue [NotMapped]

Codigo completo

[NotMapped] [Display(Name = "Is Active")] [Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")] public bool IsActive { get; set; }

porque está configurado como verdadero por defecto en MVC a pesar de que se mostrará deseleccionado en el navegador, por lo que la validación podría no funcionar como espera, por eso debe agregar este código javascript para perfeccionar la validación.

<script> // extend jquery range validator to work for required checkboxes var defaultRangeValidator = $.validator.methods.range; $.validator.methods.range = function(value, element, param) { if(element.type === ''checkbox'') { // if it''s a checkbox return true if it is checked return element.checked; } else { // otherwise run the default validation function return defaultRangeValidator.call(this, value, element, param); } } </script>

Disfruta codificando


Gracias por la solución anterior, que me puso en la dirección correcta, pero para mí no funcionó bien. Necesito agregar el siguiente script a la página que extiende el validador de jquery para obtener el trabajo de la solución anterior. Pensé en compartir esto si alguien se encuentra con un problema similar.

<script> // extend jquery range validator to work for required checkboxes var defaultRangeValidator = $.validator.methods.range; $.validator.methods.range = function(value, element, param) { if(element.type === ''checkbox'') { // if it''s a checkbox return true if it is checked return element.checked; } else { // otherwise run the default validation function return defaultRangeValidator.call(this, value, element, param); } } </script>


[Display(Name = "Is Active")] [Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")] public bool IsActive { get; set; }