Wie ein Benutzer wählen, mindestens ein Kontrollkästchen in einem CheckBoxList zu validieren?

stimmen
33

Ich habe eine CheckBoxList Kontrolle bekam, dass ich den Benutzer erforderlich sein soll mindestens eine Box zu überprüfen, spielt es keine Rolle, ob sie jeden einzelnen zu überprüfen, oder 3, oder sogar nur eine.

Im Geist der Validierung Kontrollen des asp.net, was kann ich verwenden, um dies zu erzwingen? Ich verwende auch die Ajax Validierung Extender, so wäre es schön, wenn es wie andere Steuerelemente aussehen könnte, und nicht einig kitschig Server Validate-Methode in dem Code-Behind.

<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>
Veröffentlicht am 18/07/2009 um 01:09
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
0

Schleife durch jedes der Elemente in ckBoxListReasons. Jeder Einzelteil wird vom Typ seiner ‚ListItem‘.

Die ListItem wird eine Eigenschaft ‚Ausgewählt‘ genannt, die ein boolean ist. Es ist wahr, wenn das Element ausgewählt ist. Etwas wie:

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

bolSelectionMade wird auf true gesetzt werden , wenn der Benutzer mindestens eine Auswahl getroffen hat. Sie können dann verwenden , den gültigen Zustand eines bestimmten Validierungssteuer einstellen Sie möchten.

Hoffe das hilft!

Richard.

Beantwortet am 18/07/2009 um 02:17
quelle vom benutzer

stimmen
59

Es ist einfach, diesen Validierungsserver Seite zu tun, aber ich gehe davon aus Sie es Client-Seite tun wollen?

JQuery kann dies so lange , sehr leicht tun , wie Sie etwas haben , das alle Kontrollkästchen Kontrollen gemeinsam haben als Selektor wie Klasse (CssClass auf .NET - Steuerung) zu verwenden. Sie können eine einfache machen JQuery - Funktion und es zu einem ASP.NET benutzerdefinierten Validator verbinden. Denken Sie daran , wenn Sie den benutzerdefinierten Validator Weg gehen tun , um sicherzustellen , dass Sie ihm Server - Seite als auch für den Fall , überprüfen Javascript nicht funktioniert, müssen Sie nicht eine freie Server - Seite Prüfung wie auch die anderen .NET - Validierer bekommen.

Weitere Informationen zu benutzerdefinierten Validierer die folgenden Links finden Sie unter : www.asp.net und MSDN

Sie brauchen nicht zu verwenden JQuery , es macht die JavaScript - Funktion auf alle Kontrollkästchen iterieren und schauen steuert viel einfacher , aber man kann einfach Vanille verwenden Javascript , wenn Sie mögen.

Hier ist ein Beispiel , das ich zu Hause: Link zum Original

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

Side Hinweis: JQuery ist nur ein wenig JS - Datei enthalten , die Sie zu Ihrer Seite hinzufügen. Sobald Sie es aufgenommen haben , können Sie alle verwenden JQuery Sie mögen. Nichts zu installieren und es wird voll in der nächsten Version von Visual Studio unterstützt werden , denke ich.

Beantwortet am 18/07/2009 um 02:33
quelle vom benutzer

stimmen
3

Schauen Sie sich diesen Artikel aus 4 Guys From Rolla:

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

Sie zeigen Ihnen, wie Sie einen Validator für die CheckBox und CheckBoxList Kontrollen zu schaffen, die genau wie der RequiredFieldValidator für den anderen .NET-Steuerelemente funktionieren. Es hat die serverseitige Validierung und die Client-seitige Validierung. Der nette Teil darüber ist, dass Sie eine Validation angeben können, und es wird mit der Validation Kontrolle arbeiten.

Es gibt auch einen Link am Ende des Artikels, die Quelle herunterladen und in Ihrem Projekt zu verwenden. Sie verweisen nur die DLL und die Steuerelemente registrieren und Sie sind gut zu gehen.

Beantwortet am 18/07/2009 um 03:22
quelle vom benutzer

stimmen
13

Hier ist eine sauberere jQuery - Implementierung , die eine ermöglicht ClientValidationFunction für eine beliebige Anzahl von CheckBoxList Steuerelemente auf einer Seite:

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;
        }
    });
}

Hier ist das Markup:

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

Und schließlich der benutzerdefinierte Validator, dass die Client-Funktion die Zielsteuerung von ID abrufen kann:

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);
    }
}
Beantwortet am 25/10/2010 um 15:59
quelle vom benutzer

stimmen
1

Hier ist eine andere Lösung , die über in Betracht gezogen werden kann Dado.Validators auf 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" />

Beispiel codebehind.aspx.cs

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

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

Ref: Überprüfen Sie, ob eine Checkbox in einer Gruppe von Kontrollkästchen in client geprüft

Beantwortet am 16/08/2013 um 16:20
quelle vom benutzer

stimmen
0

Sie können eine Verwendung CustomValidatorfür das mit ein wenig 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>

Und für ein 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>
Beantwortet am 31/03/2017 um 12:55
quelle vom benutzer

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