Cum pot face o casetă de selectare necesare pe un formular ASP.NET?

voturi
102

Am făcut unele căutarea pe acest lucru, și am găsit mai multe răspunsuri parțiale, însă nimic care dă-mi că cald pufos „acesta este modul corect de a face acest lucru“. Pentru a răspunde la plângerea cea mai frecvent întâlnită în această întrebare: „checkbox poate avea două stări legitime - verificate și neverificate“, aceasta este o „Accept termenii și condițiile ...“ caseta de selectare care trebuie să fie verificate pentru a se finaliza o înregistrare, prin urmare, verificarea casetei este necesară din punct de vedere logica de afaceri.

Vă rugăm să furnizați complet cut-n-paste fragmente de cod gata cu răspunsul tău! Știu că există mai multe piese la acest lucru - CustomValidator (probabil), codul-spatele, unele javascript și, eventual, un cec de IsValid, iar partea frustrant pentru mine este faptul că în fiecare exemplu l-am văzut, una dintre acestea critice piese lipsesc!

Întrebat 04/08/2009 la 16:15
sursa de către utilizator
În alte limbi...                            


6 răspunsuri

voturi
-1

mod non-JavaScript. . Pagina 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>

Cod spatele:

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

Pentru orice acțiuni ați putea avea nevoie (Reguli de afaceri):

If Page.IsValid Then
   'do logic
End If 

Ne pare rău pentru codul VB. . . puteți converti la C # în cazul în care este plăcerea dumneavoastră. Compania lucrez de acum necesită VB :(

Publicat 04/08/2009 la 16:36
sursa de către utilizator

voturi
202

Funcția JavaScript pentru validare pe partea de client (folosind jQuery) ...

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

cod spatele pentru validarea pe partea de server ...

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

cod ASP.Net pentru caseta & validatorului ...

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

și în cele din urmă, în postback dvs. - fie dintr-un buton sau orice altceva ...

if (Page.IsValid)
{
    // your code here...
}
Publicat 04/08/2009 la 16:37
sursa de către utilizator

voturi
17

C # versiune a răspunsului lui andrew:

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

Code-in spatele:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    args.IsValid = CheckBox1.Checked;
}
Publicat 04/08/2009 la 16:39
sursa de către utilizator

voturi
4

răspunsul lui Scott va lucra pentru clasele de casete de selectare. Dacă doriți casetele de selectare individuale, trebuie să fie un pic sneakier. Dacă faci doar o singură cutie, este mai bine să facă acest lucru cu ID-uri. Acest exemplu face prin casetele de selectare specifice și nu necesită jQuery. Este, de asemenea, un exemplu frumos pic de modul în care puteți obține aceste ID-uri de control plictisitor în Javascript.

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

Și 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
Publicat 18/02/2010 la 00:06
sursa de către utilizator

voturi
10

Dacă doriți un validator adevărat că nu se bazează pe jQuery și se ocupă de validarea pe partea de server, precum și (și ar trebui. Validarea pe partea de server este cea mai importantă parte), atunci aici este 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 @"<script language=""javascript"">function cb_verify(sender) {var cntrl = document.getElementById(sender.controltovalidate);return cntrl.checked;}</script>";
    }
}
Publicat 07/12/2011 la 03:21
sursa de către utilizator

voturi
2

Eu de obicei efectua validarea pe partea 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>       
Publicat 06/02/2015 la 21:35
sursa de către utilizator

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