Πώς μπορώ να κάνω ένα πλαίσιο ελέγχου που απαιτούνται για μια φόρμα ASP.NET;

ψήφοι
102

Έχω κάνει κάποια έρευνα για αυτό, και έχω βρεθεί πολλές επιμέρους απαντήσεις, όμως τίποτα που να μου δίνει ότι ζεστό fuzzy «αυτός είναι ο σωστός τρόπος για να γίνει αυτό». Για να απαντήσετε στην πιο συχνές καταγγελία κατά αυτή την ερώτηση: «κουτάκια μπορεί να έχει δύο νόμιμες κράτη - ελεγχόμενες και μη ελεγχόμενες», αυτό είναι ένα «Αποδέχομαι τους όρους και τις προϋποθέσεις ...» πλαίσιο ελέγχου που πρέπει να ελέγχονται προκειμένου να ολοκληρωθεί μια εγγραφή, ως εκ τούτου, επιλέγοντας το πλαίσιο απαιτείται από μια επιχειρηματική λογική άποψη.

Να δώσετε πλήρη cut-n-paste έτοιμα κομμάτια κώδικα, με την απάντησή σας! Ξέρω ότι υπάρχουν πολλά κομμάτια σε αυτό - το CustomValidator (προφανώς), ο κωδικός-πίσω, κάποια javascript και, ενδεχομένως, μια επιταγή για IsValid, και το απογοητευτικό για μένα είναι ότι σε κάθε παράδειγμα που έχω δει, ένα από αυτά τα κρίσιμα κομμάτια λείπει!

Δημοσιεύθηκε 04/08/2009 στις 16:15
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
-1

Μη javascript τρόπο. . 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>

Κωδικός Πίσω από:

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

Για οποιεσδήποτε ενέργειες που μπορεί να χρειαστείτε (επιχειρήσεων Κανόνες):

If Page.IsValid Then
   'do logic
End If 

Συγγνώμη για τον κώδικα VB. . . μπορείτε να το μετατρέψετε σε C #, αν αυτό είναι δική σας ευχαρίστηση. Η εταιρεία που εργάζομαι για τώρα απαιτεί VB :(

Απαντήθηκε 04/08/2009 στις 16:36
πηγή χρήστη

ψήφοι
202

javascript λειτουργία για την πλευρά του πελάτη επικύρωση (με τη χρήση jQuery) ...

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

πίσω από τον κώδικα για την πλευρά του διακομιστή επικύρωση ...

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

κώδικα ASP.Net για το πλαίσιο ελέγχου και επικύρωσης ...

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

και, τέλος, στην postback σας - είτε από ένα κουμπί ή οτιδήποτε άλλο ...

if (Page.IsValid)
{
    // your code here...
}
Απαντήθηκε 04/08/2009 στις 16:37
πηγή χρήστη

ψήφοι
17

C # έκδοση του απάντηση Ανδρέα:

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

Κωδικός-πίσω:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    args.IsValid = CheckBox1.Checked;
}
Απαντήθηκε 04/08/2009 στις 16:39
πηγή χρήστη

ψήφοι
4

απάντηση Scott θα εργαστεί για κατηγορίες πλαίσια ελέγχου. Αν θέλετε επιμέρους πλαίσια ελέγχου, θα πρέπει να είναι λίγο sneakier. Αν είστε απλά να κάνει ένα κουτί, είναι καλύτερα να το κάνουμε με ταυτότητες. Αυτό το παράδειγμα κάνει με συγκεκριμένα πλαίσια ελέγχου και δεν απαιτεί jQuery. Είναι επίσης ένα ωραίο παράδειγμα για το πώς μπορείτε να πάρετε εκείνα τα ενοχλητικά αναγνωριστικά ελέγχου σε 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>

Και η 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
Απαντήθηκε 18/02/2010 στις 00:06
πηγή χρήστη

ψήφοι
10

Αν θέλετε μια πραγματική επικύρωσης που δεν βασίζεται σε jQuery και χειρίζεται επικύρωσης στην πλευρά του server, καθώς (και θα έπρεπε. Πλευρά του server επικύρωση είναι το πιο σημαντικό μέρος), τότε εδώ είναι ένα στοιχείο ελέγχου

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>";
    }
}
Απαντήθηκε 07/12/2011 στις 03:21
πηγή χρήστη

ψήφοι
2

Εγώ συνήθως εκτελεί την επικύρωση από την πλευρά του πελάτη:

<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>       
Απαντήθηκε 06/02/2015 στις 21:35
πηγή χρήστη

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