Comment créer une case à cocher requirejse sur un formulaire ASP.NET?

J’ai fait quelques recherches à ce sujet, et j’ai trouvé plusieurs réponses partielles, mais rien de ce qui me donne cette idée floue “c’est la bonne façon de faire”. Pour répondre à la plainte la plus fréquente contre cette question: “les cases à cocher peuvent avoir deux états légitimes – cochée et décochée”, il s’agit d’une case à cocher “J’accepte les termes et conditions …” la vérification de la case est donc nécessaire du sharepoint vue de la logique métier.

Veuillez fournir des fragments de code complets coupés-collés avec votre réponse! Je sais qu’il y a plusieurs éléments – le CustomValidator (probablement), le code-behind, certains javascript et éventuellement une vérification pour IsValid, et le plus frustrant pour moi est que dans chaque exemple que j’ai vu, pièces manquantes!

fonction javascript pour la validation côté client (en utilisant jQuery) …

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

code-behind pour la validation côté serveur …

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

Code ASP.Net pour la case à cocher et le validateur …

  You must select this box to proceed. 

et enfin, dans votre postback – que ce soit par un bouton ou autre …

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

Version C # de la réponse d’Andrew:

   

Code-behind:

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

Si vous voulez un vrai validateur qui ne repose pas sur jquery et gère également la validation côté serveur (et vous devriez, la validation côté serveur est la partie la plus importante), alors voici un contrôle

 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(ssortingng.Format("The ControlToValidate property of '{0}' is required.", this.ID)); if (this.CheckBoxToValidate == null) throw new System.Web.HttpException(ssortingng.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.RegisterExpandoAtsortingbute(this.ClientID, "evaluationfunction", "cb_verify", false); } if (!this.Page.ClientScript.IsClientScriptBlockRegistered(this.GetType().FullName)) { cs.RegisterClientScriptBlock(this.GetType(), this.GetType().FullName, GetClientSideScript()); } } } private ssortingng GetClientSideScript() { return @""; } } 

La réponse de Scott fonctionnera pour des classes de cases à cocher. Si vous voulez des cases à cocher individuelles, vous devez être un peu sournois. Si vous ne faites qu’une boîte, il est préférable de le faire avec des identifiants. Cet exemple le fait par des cases à cocher spécifiques et ne nécessite pas jQuery. C’est aussi un bon petit exemple de la façon dont vous pouvez obtenir ces identifiants de contrôle embêtants dans votre Javascript.

Le .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.

Et le codebehind:

 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 

J’effectue généralement la validation côté client:

     

Manière non javascript . page aspx:

  

Code derrière:

 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 

Pour toute action dont vous pourriez avoir besoin (règles métier):

 If Page.IsValid Then 'do logic End If 

Désolé pour le code VB. . . vous pouvez le convertir en C # si cela vous plait. La société pour laquelle je travaille actuellement a besoin de VB 🙁