Hvordan å validere en bruker velger minst en avmerkingsboks i et CheckBoxList?

stemmer
34

Jeg har en CheckBoxList kontroll som jeg ønsker å kreve at brukeren skal kontrollere minst en boks, det spiller ingen rolle om de sjekker hver eneste en, eller tre, eller bare en.

I ånden av ASP.NET sin valideringskontroller, hva kan jeg bruke til å håndheve dette? Jeg er også bruker Ajax validering extender, så det ville være fint om det kunne se ut som andre kontroller, og ikke noen cheesy serveren validere metoden i 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>
Publisert på 18/07/2009 klokken 00:09
kilden bruker
På andre språk...                            


6 svar

stemmer
0

Loop gjennom hver av elementene i ckBoxListReasons. Hvert element vil være av typen 'listitem'.

Den listitem vil ha en egenskap kalt 'Selected' som er en boolsk. Det er sant når dette elementet velges. Noe som:

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

bolSelectionMade vil bli satt til true hvis brukeren har gjort minst ett valg. Du kan deretter bruke denne til å angi gyldig tilstand av en bestemt validator kontroll du vil.

Håper dette hjelper!

Richard.

Svarte 18/07/2009 kl. 01:17
kilden bruker

stemmer
60

Det er lett å gjøre dette validering server side, men jeg antar du vil gjøre det klientsiden?

JQuery kan gjøre dette veldig lett, så lenge du har noe som alle avmerkingsboksen kontroller har til felles å bruke som en velger som klasse (CssClass på NET kontroll). Du kan lage en enkel jQuery funksjon og koble den til en ASP.NET tilpasset validator. Husk at hvis du går skikken validator ruten å sørge for at du sjekke det server side så vel i tilfelle javascript ikke fungerer, trenger du ikke får en gratis server side sjekk som de andre NET validatorer.

For mer informasjon om tilpassede validatorer sjekke ut følgende linker: www.asp.net og MSDN

Du trenger ikke å bruke jQuery , det gjør bare Javascript-funksjonen for å gjenta og se på alle dine boksen styrer mye lettere, men du kan bare bruke vanilje javascript hvis du vil.

Her er et eksempel jeg fant på: Link til opprinnelig

<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 Merk: JQuery er bare litt js filen inkluderer du trenger å legge til siden din. Når du har det tatt kan du bruke alle de JQuery du liker. Ingenting å installere, og det vil bli fullt støttet i neste versjon av Visual Studio tror jeg.

Svarte 18/07/2009 kl. 01:33
kilden bruker

stemmer
3

Sjekk ut denne artikkelen fra 4 Guys Fra Rolla:

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

De viser deg hvordan du oppretter en validator for boksen og CheckBoxList kontroller som fungerer akkurat som den RequiredFieldValidator for de andre NET kontroller. Det har siden validering server og klientsiden validering. The nice del om det er at du kan angi en ValidationGroup og den vil fungere med ValidationSummary kontroll.

Det er også en link nederst i artikkelen for å laste ned kilde og bruke det i prosjektet. Du bare referere til dll og registrere kontrollene og du er godt å gå.

Svarte 18/07/2009 kl. 02:22
kilden bruker

stemmer
13

Her er en renere jQuery implementering som gjør at en ClientValidationFunction for en rekke CheckBoxList kontroller på en side:

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

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

Og til slutt, den tilpassede validator som gjør at klientfunksjonen for å hente målet kontroll med 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);
    }
}
Svarte 25/10/2010 kl. 14:59
kilden bruker

stemmer
1

Her er en annen løsning som kan vurderes via Dado.Validators på 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" />

eksempel codebehind.aspx.cs

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

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

Ref: Kontroller om en er merket i en gruppe av boksene i client

Svarte 16/08/2013 kl. 15:20
kilden bruker

stemmer
0

Du kan bruke en CustomValidatorfor det med en liten bit av 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>

Og for en 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>
Svarte 31/03/2017 kl. 12:55
kilden bruker

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