¿Cómo puedo hacer que se requiera una checkbox en un formulario de ASP.NET?

He hecho algunas búsquedas sobre esto, y he encontrado varias respuestas parciales, sin embargo, nada que me dé esa calurosa efusión de “esta es la manera correcta de hacer esto”. Para responder a la queja más frecuente contra esta pregunta: “las casillas de verificación pueden tener dos estados legítimos, marcados y desmarcados”, esta es una checkbox “Acepto los términos y condiciones …” que debe verificarse para completar un registro. por lo tanto, es necesario marcar la casilla desde el punto de vista de la lógica comercial.

¡Proporcione fragmentos completos de códigos listos para cortar y pegar con su respuesta! Sé que hay varias piezas en esto: el Custom Validator (presumiblemente), el código subyacente, algunos javascript y posiblemente un cheque para IsValid, y la parte frustrante para mí es que en cada ejemplo que he visto, uno de estos críticos piezas falta!

función javascript para la validación del lado del cliente (usando jQuery) …

function CheckBoxRequired_ClientValidate(sender, e) { e.IsValid = jQuery(".AcceptedAgreement input:checkbox").is(':checked'); } 

código subyacente para la validación del lado del servidor …

 protected void CheckBoxRequired_ServerValidate(object sender, ServerValidateEventArgs e) { e.IsValid = MyCheckBox.Checked; } 

Código ASP.Net para la checkbox y validador …

  You must select this box to proceed. 

y finalmente, en su devolución de datos, ya sea desde un botón o lo que sea …

 if (Page.IsValid) { // your code here... } 

C # versión de la respuesta de andrew:

   

Código detrás:

 protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { args.IsValid = CheckBox1.Checked; } 

Si desea un verdadero validador que no dependa de jquery y maneje la validación del lado del servidor también (y debe hacerlo. La validación del lado del servidor es la parte más importante) entonces aquí hay un control

 public class RequiredCheckBoxValidator : System.Web.UI.WebControls.BaseValidator { private System.Web.UI.WebControls.CheckBox _ctrlToValidate = null; protected System.Web.UI.WebControls.CheckBox CheckBoxToValidate { get { if (_ctrlToValidate == null) _ctrlToValidate = FindControl(this.ControlToValidate) as System.Web.UI.WebControls.CheckBox; return _ctrlToValidate; } } protected override bool ControlPropertiesValid() { if (this.ControlToValidate.Length == 0) throw new System.Web.HttpException(string.Format("The ControlToValidate property of '{0}' is required.", this.ID)); if (this.CheckBoxToValidate == null) throw new System.Web.HttpException(string.Format("This control can only validate CheckBox.")); return true; } protected override bool EvaluateIsValid() { return CheckBoxToValidate.Checked; } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (this.Visible && this.Enabled) { System.Web.UI.ClientScriptManager cs = this.Page.ClientScript; if (this.DetermineRenderUplevel() && this.EnableClientScript) { cs.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", "cb_verify", false); } if (!this.Page.ClientScript.IsClientScriptBlockRegistered(this.GetType().FullName)) { cs.RegisterClientScriptBlock(this.GetType(), this.GetType().FullName, GetClientSideScript()); } } } private string GetClientSideScript() { return @""; } } 

La respuesta de Scott funcionará para clases de casillas de verificación. Si quieres casillas de verificación individuales, tienes que ser un poco más astuto. Si solo está haciendo una caja, es mejor hacerlo con las ID. Este ejemplo lo hace mediante casillas de verificación específicas y no requiere jQuery. También es un pequeño y bonito ejemplo de cómo puede obtener esos molestos ID de control en su Javascript.

El .ascx:

   I agree to the Terms & Conditions . 
You must agree to the terms and conditions. I certify that I am at least 18 years of age. You must be 18 years or older to continue.

Y el código detrás:

 Protected Sub chkAgreeValidator_ServerValidate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ServerValidateEventArgs) _ Handles chkAgreeValidator.ServerValidate e.IsValid = chkAgree.Checked End Sub Protected Sub chkAgeValidator_ServerValidate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ServerValidateEventArgs) _ Handles chkAgeValidator.ServerValidate e.IsValid = chkAge.Checked End Sub 

Normalmente realizo la validación en el lado del cliente:

     

Forma no javascript . página aspx:

  

Código detrás:

 Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate If Not CheckBox1.Checked Then args.IsValid = False End If End Sub 

Para cualquier acción que pueda necesitar (Reglas comerciales):

 If Page.IsValid Then 'do logic End If 

Perdón por el código VB. . . puedes convertirlo a C # si ese es tu placer. La compañía para la que estoy trabajando ahora requiere VB 🙁