Πώς να επικυρώσει ο χρήστης επιλέξει τουλάχιστον ένα πλαίσιο ελέγχου σε μια CheckBoxList;

ψήφοι
33

Έχω ένα στοιχείο ελέγχου CheckBoxList που θέλω να απαιτούν από το χρήστη να ελέγχει τουλάχιστον ΕΝΑ κουτί, δεν έχει σημασία αν ελέγξετε κάθε μία, ή 3, ή ακόμα και μόνο μία.

Στο πνεύμα των ελέγχων επικύρωσης asp.net είναι, τι μπορώ να χρησιμοποιήσω για να επιβάλουν αυτό; Είμαι, επίσης, χρησιμοποιώντας την επικύρωση επέκτασης Ajax, έτσι θα ήταν ωραίο αν θα μπορούσε να μοιάζει με τους άλλους ελέγχους, και όχι κάποια κιτς μέθοδο του server επικύρωση της codebehind.

<asp:CheckBoxList RepeatDirection=Horizontal RepeatLayout=Table RepeatColumns=3 ID=ckBoxListReasons runat=server>
    <asp:ListItem Text=Preliminary Construction Value=prelim_construction />
    <asp:ListItem Text=Final Construction Value=final_construction />
    <asp:ListItem Text=Construction Alteration Value=construction_alteration />
    <asp:ListItem Text=Remodel Value=remodel />
    <asp:ListItem Text=Color Value=color />
    <asp:ListItem Text=Brick Value=brick />
    <asp:ListItem Text=Exterior Lighting Value=exterior_lighting />
    <asp:ListItem Text=Deck/Patio/Flatwork Value=deck_patio_flatwork />
    <asp:ListItem Text=Fence/Screening Value=fence_screening />
    <asp:ListItem Text=Landscape - Front Value=landscape_front />
    <asp:ListItem Text=Landscape - Side/Rear Value=landscape_side_rear />
    <asp:ListItem Text=Other Value=other />
</asp:CheckBoxList>
Δημοσιεύθηκε 18/07/2009 στις 01:09
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
0

Loop μέσα από κάθε ένα από τα αντικείμενα στο ckBoxListReasons. Κάθε στοιχείο θα είναι τύπου «listitem».

Η listitem θα έχουν μια ιδιότητα που ονομάζεται «επιλεγμένο», που είναι μια boolean. Είναι αλήθεια, όταν είναι επιλεγμένο το στοιχείο. Κάτι όπως:

Dim bolSelectionMade As Boolean = False
For Each item As ListItem in ckBoxListReasons.Items
 If item.Selected = True Then
  bolSelectionMade = True
 End If
Next

bolSelectionMade θα οριστεί σε true αν ο χρήστης έχει κάνει τουλάχιστον μία επιλογή. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε αυτό για να ορίσετε το Έγκυρη κατάσταση ενός συγκεκριμένου ελέγχου επικύρωσης που σας αρέσει.

Η ελπίδα αυτό βοηθά!

Richard.

Απαντήθηκε 18/07/2009 στις 02:17
πηγή χρήστη

ψήφοι
59

Είναι εύκολο να κάνουμε αυτή την πλευρά του διακομιστή επικύρωσης, αλλά υποθέτω ότι θέλετε να το κάνετε πλευρά του πελάτη;

JQuery να το κάνετε αυτό πολύ εύκολα, αρκεί να έχετε κάτι που όλοι οι έλεγχοι πλαίσιο ελέγχου έχουν από κοινού να χρησιμοποιήσουν ως επιλογέας όπως η κοινωνική τάξη (CssClass για τον έλεγχο του .NET σας). Μπορείτε να κάνετε μια απλή JQuery λειτουργία και συνδέστε το με ένα ASP.NET προσαρμοσμένο επικύρωσης. Θυμηθείτε αν το κάνετε πηγαίνετε το έθιμο επικύρωσης διαδρομής για να βεβαιωθείτε ότι έχετε ελέγξει την πλευρά του server, καθώς και στην περίπτωση JavaScript δεν λειτουργεί, δεν έχετε ένα δωρεάν διακομιστή ελέγχου όπως και τα άλλα .NET επικύρωσης.

Για περισσότερες πληροφορίες σχετικά με προσαρμοσμένες επικύρωσης δείτε τους παρακάτω συνδέσμους: www.asp.net και MSDN

Δεν χρειάζεται να χρησιμοποιήσετε JQuery , κάνει ακριβώς το javascript λειτουργία για να επαναλάβει και να εξετάσουμε όλα κουτάκι σας ελέγχει πολύ πιο εύκολο, αλλά μπορείτε να χρησιμοποιήσετε μόνο βανίλια javascript αν σας αρέσει.

Εδώ είναι ένα παράδειγμα που βρήκα στο: Σύνδεσμος στην πρωτότυπη

<asp:CheckBoxList ID="chkModuleList"runat="server" >
</asp:CheckBoxList>

<asp:CustomValidator runat="server" ID="cvmodulelist"
  ClientValidationFunction="ValidateModuleList"
  ErrorMessage="Please Select Atleast one Module" ></asp:CustomValidator>

// javascript to add to your aspx page
function ValidateModuleList(source, args)
{
  var chkListModules= document.getElementById ('<%= chkModuleList.ClientID %>');
  var chkListinputs = chkListModules.getElementsByTagName("input");
  for (var i=0;i<chkListinputs .length;i++)
  {
    if (chkListinputs [i].checked)
    {
      args.IsValid = true;
      return;
    }
  }
  args.IsValid = false;
}

Πλευρά Σημείωση: JQuery είναι μόνο ένα μικρό αρχείο js περιλαμβάνουν πρέπει να προσθέσετε στη σελίδα σας. Μόλις έχετε συμπεριλάβει μπορείτε να χρησιμοποιήσετε όλες τις JQuery σας αρέσει. Δεν έχει τίποτα να εγκαταστήσετε και θα υποστηρίζεται πλήρως στην επόμενη έκδοση του Visual Studio νομίζω.

Απαντήθηκε 18/07/2009 στις 02:33
πηγή χρήστη

ψήφοι
3

Ελέγξτε έξω αυτό το άρθρο από 4 Παιδιά Από Rolla:

http://aspnet.4guysfromrolla.com/articles/092006-1.aspx

Θα σας δείξει πώς να δημιουργήσετε ένα επικύρωσης για το πεδίο ελέγχου και CheckBoxList ελέγχου που λειτουργεί ακριβώς όπως το RequiredFieldValidator για τις άλλες ΝΕΤ ελέγχους. Έχει την πλευρά της επικύρωσης διακομιστή και την πλευρά του πελάτη επικύρωση. Το ωραίο μέρος για αυτό είναι ότι μπορείτε να καθορίσετε μια ValidationGroup και θα συνεργαστεί με τον έλεγχο ValidationSummary.

Υπάρχει επίσης ένα σύνδεσμο στο κάτω μέρος του άρθρου, για να κατεβάσετε τον κώδικα και να το χρησιμοποιήσετε στο έργο σας. Απλά αναφέρετε το dll και να καταχωρήσετε τα στοιχεία ελέγχου και είστε καλοί να πάτε.

Απαντήθηκε 18/07/2009 στις 03:22
πηγή χρήστη

ψήφοι
13

Εδώ είναι ένα καθαρότερο jQuery εφαρμογή που επιτρέπει σε κάποιον ClientValidationFunction για οποιοδήποτε αριθμό των CheckBoxList ελέγχου σε μια σελίδα:

function ValidateCheckBoxList(sender, args) {
    args.IsValid = false;

    $("#" + sender.id).parent().find("table[id$="+sender.ControlId+"]").find(":checkbox").each(function () {
        if ($(this).attr("checked")) {
        args.IsValid = true;
        return;
        }
    });
}

Εδώ είναι η σήμανση:

<asp:CheckBoxList runat="server"
          Id="cblOptions" 
          DataTextField="Text" 
          DataValueField="Id" />

<xx:CustomValidator Display="Dynamic" 
              runat="server" 
              ID="cblOptionsValidator"
              ControlId="cblOptions"
              ClientValidationFunction="ValidateCheckBoxList" 
              ErrorMessage="One selection required." />

Και τέλος, το έθιμο επικύρωσης που επιτρέπει τη λειτουργία πελάτη να ανακτήσει τον έλεγχο στόχο με ID:

public class CustomValidator : System.Web.UI.WebControls.CustomValidator
{
    public string ControlId { get; set; }

    protected override void OnLoad(EventArgs e)
    {
        if (Enabled)
            Page.ClientScript.RegisterExpandoAttribute(ClientID, "ControlId", ControlId);

        base.OnLoad(e);
    }
}
Απαντήθηκε 25/10/2010 στις 15:59
πηγή χρήστη

ψήφοι
1

Εδώ είναι μια άλλη λύση που μπορεί να θεωρηθεί μέσω Dado.Validators στο GitHub.

<asp:CheckBoxList ID="cblCheckBoxList" runat="server">
    <asp:ListItem Text="Check Box (empty)" Value="" />
    <asp:ListItem Text="Check Box 1" Value="1" />
    <asp:ListItem Text="Check Box 2" Value="2" />
    <asp:ListItem Text="Check Box 3" Value="3" />
</asp:CheckBoxList>

<Dado:RequiredFieldValidator runat="server" ControlToValidate="cblCheckBoxList" ValidationGroup="vlgSubmit" />

παράδειγμα codebehind.aspx.cs

btnSubmit.Click += (a, b) =>
{
    Page.Validate("vlgSubmit");
    if (Page.IsValid) {
        // Validation Successful
    }
};

https://www.nuget.org/packages/Dado.Validators/

Ref: Ελέγξτε αν το πλαίσιο ελέγχου είναι επιλεγμένο σε μια ομάδα πλαισίων ελέγχου σε clientside

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

ψήφοι
0

Μπορείτε να χρησιμοποιήσετε ένα CustomValidatorγια ότι με λίγη javascript.

<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Select at least one"
    ClientValidationFunction="checkCheckBoxList"></asp:CustomValidator>

<script type="text/javascript">
    function checkCheckBoxList(oSrc, args) {
        var isValid = false;
        $("#<%= CheckBoxList1.ClientID %> input[type='checkbox']:checked").each(function (i, obj) {
            isValid = true;
        });
        args.IsValid = isValid;
    }
</script>

Και για μια RadioButtonList

<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Select at least one" ClientValidationFunction="checkRadioButtonList"></asp:CustomValidator>

<script type="text/javascript">
    function checkRadioButtonList(oSrc, args) {
        if ($("input[name='<%= RadioButtonList1.UniqueID %>']:checked").val() == null) {
            args.IsValid = false;
        } else {
            args.IsValid = true;
        }
    }
</script>
Απαντήθηκε 31/03/2017 στις 12:55
πηγή χρήστη

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