Comment puis-je faire une case à cocher sur un formulaire requis ASP.NET?

voix
102

Je l'ai fait quelques recherches sur ce sujet, et je l'ai trouvé plusieurs réponses partielles, mais rien qui me donne que «c'est la bonne façon de le faire » réconfortantes. Pour répondre à la plainte la plus fréquente contre cette question: « peut avoir deux cases à cocher états légitimes - enregistrés et non enregistrés », c'est un «J'accepte les termes et conditions ... » case à cocher qui doit être vérifié afin de compléter une inscription, vérifier d'où la case est nécessaire du point de vue de la logique métier.

S'il vous plaît fournir des informations complètes coupe-n-coller des fragments de code prêt avec votre réponse! Je sais qu'il ya plusieurs pièces à cela - le CustomValidator (probablement), le code-behind, javascript et peut-être un chèque de IsValid, et la partie frustrante pour moi est que dans chaque exemple, je l'ai vu, l'un de ces critiques pièces manque!

Créé 04/08/2009 à 16:15
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
-1

manière non javascript. . page ASPX:

 <form id="form1" runat="server">
<div>
    <asp:CheckBox ID="CheckBox1" runat="server" />
    <asp:CustomValidator ID="CustomValidator1"
        runat="server" ErrorMessage="CustomValidator" ControlToValidate="CheckBox1"></asp:CustomValidator>
</div>
</form>

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 toutes les actions que vous pourriez avoir besoin (règles d'affaires):

If Page.IsValid Then
   'do logic
End If 

Désolé pour le code VB. . . vous pouvez le convertir en C # si tel est votre plaisir. La société Je travaille pour VB exige en ce moment :(

Créé 04/08/2009 à 16:36
source utilisateur

voix
202

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

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

code-behind pour la validation du côté serveur ...

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

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

<asp:CheckBox runat="server" ID="MyCheckBox" CssClass="AcceptedAgreement" />
<asp:CustomValidator runat="server" ID="CheckBoxRequired" EnableClientScript="true"
    OnServerValidate="CheckBoxRequired_ServerValidate"
    ClientValidationFunction="CheckBoxRequired_ClientValidate">You must select this box to proceed.</asp:CustomValidator>

et enfin, dans votre postback - que ce soit à partir d'un bouton ou autre ...

if (Page.IsValid)
{
    // your code here...
}
Créé 04/08/2009 à 16:37
source utilisateur

voix
17

C version # de la réponse de andrew:

<asp:CustomValidator ID="CustomValidator1" runat="server" 
        ErrorMessage="Please accept the terms..." 
        onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
    <asp:CheckBox ID="CheckBox1" runat="server" />

Code-behind:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    args.IsValid = CheckBox1.Checked;
}
Créé 04/08/2009 à 16:39
source utilisateur

voix
4

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

Le .ascx:

<script type="text/javascript">

    function checkAgreement(source, args)
    {                
        var elem = document.getElementById('<%= chkAgree.ClientID %>');
        if (elem.checked)
        {
            args.IsValid = true;
        }
        else
        {        
            args.IsValid = false;
        }
    }

    function checkAge(source, args)
    {
        var elem = document.getElementById('<%= chkAge.ClientID %>');
        if (elem.checked)
        {
            args.IsValid = true;
        }
        else
        {
            args.IsValid = false;
        }    
    }

</script>

<asp:CheckBox ID="chkAgree" runat="server" />
<asp:Label AssociatedControlID="chkAgree" runat="server">I agree to the</asp:Label>
<asp:HyperLink ID="lnkTerms" runat="server">Terms & Conditions</asp:HyperLink>
<asp:Label AssociatedControlID="chkAgree" runat="server">.</asp:Label>
<br />

<asp:CustomValidator ID="chkAgreeValidator" runat="server" Display="Dynamic"
    ClientValidationFunction="checkAgreement">
    You must agree to the terms and conditions.
    </asp:CustomValidator>

<asp:CheckBox ID="chkAge" runat="server" />
<asp:Label AssociatedControlID="chkAge" runat="server">I certify that I am at least 18 years of age.</asp:Label>        
<asp:CustomValidator ID="chkAgeValidator" runat="server" Display="Dynamic"
    ClientValidationFunction="checkAge">
    You must be 18 years or older to continue.
    </asp:CustomValidator>

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
Créé 18/02/2010 à 00:06
source utilisateur

voix
10

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

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 @"<script language=""javascript"">function cb_verify(sender) {var cntrl = document.getElementById(sender.controltovalidate);return cntrl.checked;}</script>";
    }
}
Créé 07/12/2011 à 03:21
source utilisateur

voix
2

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

<asp:checkbox id="chkTerms" text=" I agree to the terms" ValidationGroup="vg" runat="Server"  />
<asp:CustomValidator id="vTerms"
                ClientValidationFunction="validateTerms" 
                ErrorMessage="<br/>Terms and Conditions are required." 
                ForeColor="Red"
                Display="Static"
                EnableClientScript="true"
                ValidationGroup="vg"
                runat="server"/>

<asp:Button ID="btnSubmit" OnClick="btnSubmit_Click" CausesValidation="true" Text="Submit" ValidationGroup="vg" runat="server" />

<script>
    function validateTerms(source, arguments) {
        var $c = $('#<%= chkTerms.ClientID %>');
        if($c.prop("checked")){
            arguments.IsValid = true;
        } else {
            arguments.IsValid = false;
        }
    }
</script>       
Créé 06/02/2015 à 21:35
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more