Hoe maak ik een checkbox vereist op een ASP.NET vorm?

stemmen
102

Ik heb wat zoeken op dit gedaan, en ik heb een aantal gedeeltelijke antwoorden gevonden, maar niets dat me geeft dat warme fuzzy dit is de juiste manier om dit te doen. Om de meest voorkomende klacht tegen deze vraag te beantwoorden: checkboxes kan twee legitieme staten hebben - en niet gecontroleerde, dit is een ik ga akkoord met de voorwaarden ... checkbox die moeten worden gecontroleerd om een ​​registratie te voltooien, vandaar het vakje is vereist van een business logica standpunt.

Gelieve volledige cut-n-paste klaar code fragmenten met uw reactie! Ik weet dat er verschillende stukken om dit - de CustomValidator (vermoedelijk), de code-behind, wat javascript en eventueel een cheque voor IsValid, en het frustrerende deel voor mij is dat in elk voorbeeld die ik heb gezien, een van deze kritische stukken ontbreekt!

De vraag is gesteld op 04/08/2009 om 16:15
bron van user
In andere talen...                            


6 antwoorden

stemmen
-1

Non-javascript weg. . aspxpagina:

 <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 achter:

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

Voor alle acties die je nodig zou kunnen hebben (business rules):

If Page.IsValid Then
   'do logic
End If 

Sorry voor de VB-code. . . kunt u deze converteren naar C # als dat uw plezier. Het bedrijf waar ik voor werk op dit moment vereist VB :(

antwoordde op 04/08/2009 om 16:36
bron van user

stemmen
202

javascriptfunctie voor client side validatie (middels jQuery) ...

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

code-behind voor server-side validatie ...

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

ASP.Net code voor het selectievakje & validator ...

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

en ten slotte, in uw postback - hetzij van een knop of wat dan ook ...

if (Page.IsValid)
{
    // your code here...
}
antwoordde op 04/08/2009 om 16:37
bron van user

stemmen
17

C # versie van het antwoord van Andrew's:

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

Code achter:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    args.IsValid = CheckBox1.Checked;
}
antwoordde op 04/08/2009 om 16:39
bron van user

stemmen
4

antwoord Scott's zal werken voor de klassen van de vakjes. Als u afzonderlijke vakjes wilt, moet je een beetje geniepiger zijn. Als je net doet een doos, het is beter om het te doen met ID's. Dit voorbeeld doet het door gerichte controle dozen en vereist geen jQuery. Het is ook een leuk klein voorbeeld van hoe u die vervelende controle-ID's kan krijgen in je Javascript.

De 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>

En de 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
antwoordde op 18/02/2010 om 00:06
bron van user

stemmen
10

Als je een echte validator die niet afhankelijk is van jQuery en handgrepen server-side validatie en willen (en je moet. Server side validatie is het belangrijkste onderdeel) dan is hier een controle

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>";
    }
}
antwoordde op 07/12/2011 om 03:21
bron van user

stemmen
2

Ik typisch voer de validatie op de 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>       
antwoordde op 06/02/2015 om 21:35
bron van user

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