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; }