Jak zweryfikować użytkownik wybrał co najmniej jedno pole wyboru w CheckBoxList?

głosy
33

Mam kontroli CheckBoxList który chcę wymagać od użytkownika, aby sprawdzić, co najmniej jedno pole, to nie ma znaczenia, jeśli sprawdzeniu, że każdy jeden, albo 3, albo nawet tylko jeden.

W duchu kontroli poprawności ASP.NET, w jaki sposób można użyć do egzekwowania tego? Jestem również za pomocą walidacji przedłużacz Ajax, więc byłoby miło, gdyby to mogło wyglądać innych kontroli, a nie jakiś tandetny sposób serwer validate w kodzie.

<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>
Utwórz 18/07/2009 o 01:09
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
0

Pętla przez każdy z elementów w ckBoxListReasons. Każdy element będzie typu „ListItem”.

ListItem będzie miał właściwość o nazwie „Selected”, który jest wartością logiczną. To prawda, po wybraniu tego elementu. Coś jak:

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

bolSelectionMade zostanie ustawiona na wartość true, jeśli użytkownik dokonał co najmniej jeden wybór. Następnie można używać, aby ustawić poprawny stan konkretnej kontroli walidatora chcesz.

Mam nadzieję że to pomoże!

Richard.

Odpowiedział 18/07/2009 o 02:17
źródło użytkownik

głosy
59

Łatwo to zrobić walidacji po stronie serwera, ale jestem zakładając chcesz to zrobić po stronie klienta?

JQuery można to zrobić bardzo łatwo, jak długo, jak masz coś, że wszystkie kontrole checkbox mają wspólnego używać jako selektor, takie jak klasy (CssClass na kontroli .NET). Można zrobić prosty JQuery funkcji i podłączyć go do ASP.NET niestandardowy walidator. Pamiętaj, jeśli nie iść zwyczaj trasa walidator aby upewnić się, sprawdź to po stronie serwera, jak również w przypadku javascript nie działa, nie dostaniesz bezpłatną kontrolę po stronie serwera, jak innych NET weryfikatorów.

Aby uzyskać więcej informacji na temat niestandardowych walidatorami sprawdź poniższe linki: www.asp.net i MSDN

Nie trzeba używać JQuery , to właśnie sprawia, że funkcja JavaScript, żeby iterację i spojrzeć na całym swoim wyboru kontroluje znacznie łatwiejsze, ale można po prostu użyć wanilię javascript, jeśli chcesz.

Oto przykład znalazłem na stronie: Link do oryginału

<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 Uwaga: JQuery jest tylko trochę plik js to trzeba dodać do swojej strony. Gdy masz to włączone można korzystać cały JQuery chcesz. Nic instalować i to będzie pełne wsparcie w kolejnej wersji programu Visual Studio, myślę.

Odpowiedział 18/07/2009 o 02:33
źródło użytkownik

głosy
3

Sprawdź ten artykuł z 4 chłopaków z Rolla:

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

Pokazują one, jak utworzyć walidatora do kontroli wyboru i CheckBoxList że działa dokładnie tak jak dla innych RequiredFieldValidator NET kontroli. Ma poprawności po stronie serwera oraz walidacji po stronie klienta. Miła część o to można określić ValidationGroup i będzie działać z kontrolą ValidationSummary.

Jest też link na dole tego artykułu, aby pobrać źródła i użyć go w swoim projekcie. Wystarczy odwołać dll i zarejestrować kontroli i jesteś dobry, aby przejść.

Odpowiedział 18/07/2009 o 03:22
źródło użytkownik

głosy
13

Oto odkurzacz jQuery realizacja który pozwala ClientValidationFunction dla dowolnej liczby CheckBoxList kontroli na stronie:

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

Oto znaczników:

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

I wreszcie, niestandardowy walidator który umożliwia funkcja klient odzyskać kontrolę docelowego przez 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);
    }
}
Odpowiedział 25/10/2010 o 15:59
źródło użytkownik

głosy
1

Oto kolejne rozwiązanie, które mogą być uznane za Dado.Validators na 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" />

Przykład codebehind.aspx.cs

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

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

Ref: Sprawdź, czy jest zaznaczone pole wyboru w grupie pól wyboru w stronie klienta

Odpowiedział 16/08/2013 o 16:20
źródło użytkownik

głosy
0

Można użyć CustomValidatordo tego z odrobiną 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>

I dla 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>
Odpowiedział 31/03/2017 o 12:55
źródło użytkownik

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