Hoe om te bevestigen een gebruiker ten minste één checkbox koos in een CheckBoxList?

stemmen
33

Ik heb een CheckBoxList controle die ik wil de gebruiker nodig heeft om ten minste één vakje, het maakt niet uit of ze controleren elk een, of 3, of zelfs alleen maar een.

In de geest van asp.net's validatie controles, wat kan ik gebruiken om dit af te dwingen? Ik ben ook met behulp van de Ajax validatie extender, dus het zou leuk zijn als het zou kunnen uitzien andere controles, en niet een of andere suffe server validate methode in de onderliggende code.

<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>
De vraag is gesteld op 18/07/2009 om 01:09
bron van user
In andere talen...                            


6 antwoorden

stemmen
0

Loop door elk van de items in ckBoxListReasons. Elk item zal van het type zijn 'ListItem'.

De ListItem zal een eigenschap genaamd 'Selected' dat is een boolean hebben. Het is waar, wanneer het item is geselecteerd. Zoiets als:

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

bolSelectionMade wordt ingesteld op true als de gebruiker ten minste een selectie heeft gemaakt. Vervolgens kunt u dat aan de geldige staat van een bepaalde validator controle die u wilt instellen.

Ik hoop dat dit helpt!

Richard.

antwoordde op 18/07/2009 om 02:17
bron van user

stemmen
59

Het is gemakkelijk om deze validatie server side doen, maar ik ga ervan uit dat u wilt om het te doen client-side?

JQuery kan dit zo lang als je iets dat alle checkbox controles hebben met elkaar gemeen te gebruiken als een selector zoals klasse (CssClass op uw NET control) hebben doen heel gemakkelijk. U kunt een eenvoudig te maken JQuery functie en sluit deze aan op een aangepaste ASP.NET validator. Vergeet niet als je gaat de aangepaste validator route om ervoor te zorgen dat u het te controleren server kant ook in het geval javascript niet werkt, hoef je niet een gratis server side controle net als de andere .NET validators te krijgen.

Voor meer informatie over aangepaste validators kijk op de volgende links: www.asp.net en MSDN

U hoeft niet te gebruiken JQuery , het maakt de JavaScript-functie te herhalen en te kijken naar al uw checkbox controles veel gemakkelijker, maar je kunt gewoon gebruik maken van vanille javascript als je wilt.

Hier is een voorbeeld dat ik gevonden op: Link naar de oorspronkelijke

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

Kanttekening: JQuery is gewoon een beetje js bestand op te nemen wat je nodig hebt om toe te voegen aan uw pagina. Als je eenmaal hebt opgenomen kunt u alle gebruiken JQuery u wilt. Niets te installeren en het zal volledig worden ondersteund in de volgende versie van Visual Studio denk ik.

antwoordde op 18/07/2009 om 02:33
bron van user

stemmen
3

Check dit artikel uit 4 Guys From Rolla:

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

Ze laten zien hoe je een validator te creëren voor de CheckBox en CheckBoxList controles die werkt precies hetzelfde als de RequiredFieldValidator voor de andere .NET controles. Het heeft de server-side validatie en de client-side validatie. Het aardige deel over dat is dat je kunt een ValidationGroup specificeren en het zal werken met de ValidationSummary controle.

Er is ook een link aan de onderkant van het artikel om de bron te downloaden en te gebruiken in uw project. U verwijst alleen de dll en registreer de controles en je bent goed om te gaan.

antwoordde op 18/07/2009 om 03:22
bron van user

stemmen
13

Hier is een schoner jQuery implementatie die laat men ClientValidationFunction voor een aantal CheckBoxList besturingselementen op een pagina:

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

En tot slot, de aangepaste validator die het mogelijk maakt de klant functie om de doelgroep controle door ID op te halen:

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);
    }
}
antwoordde op 25/10/2010 om 15:59
bron van user

stemmen
1

Hier is een andere oplossing die via kan worden beschouwd Dado.Validators op 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" />

voorbeeld codebehind.aspx.cs

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

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

Ref: Controleer of er een checkbox wordt gecontroleerd in een groep van vakjes in clientside

antwoordde op 16/08/2013 om 16:20
bron van user

stemmen
0

U kunt gebruik maken van een CustomValidatorvoor die met een beetje 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>

En voor een 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>
antwoordde op 31/03/2017 om 12:55
bron van user

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