Wie mache ich eine Checkbox auf einem ASP.NET-Formular erforderlich?

stimmen
102

Ich habe einige Benutzer über das getan, und ich habe mehrere Teilantworten gefunden, aber nichts, was mir gibt, dass warmen fuzzy „dies der richtige Weg ist, dies zu tun“. Um die am häufigsten auftretende Beschwerde gegen diese Frage zu beantworten: „Kontrollkästchen können zwei legitime Staaten haben - geprüft und ungeprüft“, ist dies ein „Ich akzeptiere die Bedingungen ...“ aktivieren, die überprüft werden, muss eine Registrierung abzuschließen, daher das Kontrollkästchen aus einer Business-Logik Sicht erforderlich.

Bitte geben Sie komplette cut-n-Paste bereit Codefragmente mit Ihrer Antwort! Ich weiß, es gibt mehrere Stücke dazu - der CustomValidator (vermutlich), die Code-behind, einige Javascript und möglicherweise eine Prüfung für IsValid und der frustrierenden Teil für mich ist, dass ich in jedem Beispiel gesehen habe, eine dieser kritischen Stücke fehlt!

Veröffentlicht am 04/08/2009 um 16:15
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
-1

Nicht-JavaScript-Weg. . aspx Seite:

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

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

Für alle Aktionen könnten Sie (Business Rules) müssen:

If Page.IsValid Then
   'do logic
End If 

Sorry für den VB-Code. . . Sie können es auf C # konvertieren, wenn das Ihr Vergnügen. Das Unternehmen arbeite ich für erfordert jetzt VB :(

Beantwortet am 04/08/2009 um 16:36
quelle vom benutzer

stimmen
202

JavaScript-Funktion für die Client-seitigen Gültigkeitsprüfung (unter Verwendung von jQuery) ...

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

Code-Behind für Server-seitige Validierung ...

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

ASP.Net-Code für das Kontrollkästchen & 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>

und schließlich in Ihrem Postbacks - ob von einer Schaltfläche oder was auch immer ...

if (Page.IsValid)
{
    // your code here...
}
Beantwortet am 04/08/2009 um 16:37
quelle vom benutzer

stimmen
17

C # Version von Andrew Antwort:

<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;
}
Beantwortet am 04/08/2009 um 16:39
quelle vom benutzer

stimmen
4

Scotts Antwort wird für die Klassen von Kontrollkästchen arbeiten. Wenn Sie einzelne Kontrollkästchen wollen, müssen Sie ein wenig hinterhältiger sein. Wenn Sie nur eine Box zu tun, dann ist es besser, es mit IDs zu tun. Dieses Beispiel macht es durch spezifische Kontrollkästchen und nicht jQuery benötigen. Es ist auch ein schönes kleines Beispiel dafür, wie man den lästigen Steuerelement-IDs in Ihren Javascript zu bekommen.

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

Und der Code-Behind:

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
Beantwortet am 18/02/2010 um 00:06
quelle vom benutzer

stimmen
10

Wenn Sie einen echten Validator möchten, die nicht auf jquery angewiesen ist und Griffe serverseitige Validierung als auch (und sollten. Serverseitige Validierung ist der wichtigste Teil), dann hier ein Steuerelement

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>";
    }
}
Beantwortet am 07/12/2011 um 03:21
quelle vom benutzer

stimmen
2

Ich führe in der Regel die Validierung auf der Clientseite:

<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>       
Beantwortet am 06/02/2015 um 21:35
quelle vom benutzer

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