Jak ověřit, že uživatel vybral alespoň jedno zaškrtávací políčko v CheckBoxList?

hlasů
33

Mám kontrolu CheckBoxList, že chci, aby uživatel zkontrolovat alespoň jedno okno, nezáleží na tom, jestli budou kontrolovat všechny do jednoho, nebo 3, nebo dokonce jen jeden.

V duchu ověření ovládací prvky ASP.NET to, co mohu použít k vynucení to? Jsem také pomocí ověření extender Ajax, takže by bylo hezké, kdyby to mohlo vypadat jako další ovládací prvky, a ne nějaký laciný způsob serveru Ověřit v 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>
Položena 18/07/2009 v 01:09
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
0

Procházet jednotlivé položky v ckBoxListReasons. Každá položka bude typu ‚ListItem‘.

ListItem bude mít vlastnost nazvanou ‚Selected‘, která je logická. Je to pravda, když je vybrána tato položka. Něco jako:

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

bolSelectionMade bude nastavena na hodnotu true, pokud má uživatel provedli nejméně jeden výběr. Potom můžete použít, které nastavit platný stav konkrétního kontroly validátoru se vám líbí.

Snad to pomůže!

Richard.

Odpovězeno 18/07/2009 v 02:17
zdroj uživatelem

hlasů
59

Je snadné dělat tuto stranu ověření serveru, ale já jsem za předpokladu, že chcete udělat to na straně klienta?

JQuery to lze provést velmi snadno, pokud máte něco, co všechny ovládací prvky CheckBox mají společné pouze jako volič, jako třída (CssClass na kontrolu .NET). Můžete si udělat jednoduchý JQuery funkci a připojit ji do vlastního validátoru ASP.NET. Vzpomínám si, pokud se jít vlastní cestou validátor se ujistit, že to zjistit na straně serveru i v případě, že javascript není funkční, nemusíte získat zdarma na straně serveru kontroly jako ostatní .NET validátory.

Pro více informací o vlastní validátory podívejte se na následující odkazy: www.asp.net a MSDN

Nemusíte používat jQuery , to prostě dělá javascript funkce iteraci a podívat se na všechny vaše políčko řídí mnohem jednodušší, ale stačí použít vanilky javascript, pokud se vám líbí.

Zde je příklad jsem našel na: Odkaz na původní

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

Boční Poznámka: JQuery je jen malý js soubor obsahuje musíte přidat na svou stránku. Jakmile budete mít to zahrnovalo můžete použít všechny jQuery vám líbí. Nic instalovat a bude plný podporovány v příští verzi Visual Studia myslím.

Odpovězeno 18/07/2009 v 02:33
zdroj uživatelem

hlasů
3

Podívejte se na tento článek z 4 kluci z Rolla:

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

Ty ukazují, jak vytvořit validátor pro ovládací prvky políčko a CheckBoxList který funguje stejně jako RequiredFieldValidator pro ostatní .NET ovládací prvky. Má boční ověření serveru a ověřování na straně klienta. Pěkné část o tom je můžete zadat ValidationGroup a to bude fungovat s kontrolou ValidationSummary.

K dispozici je také odkaz na spodní části článku ke stažení zdroje a použít ji ve svém projektu. jen odkazovat DLL a zaregistrovat ovládací prvky a ty jsou dobré jít.

Odpovězeno 18/07/2009 v 03:22
zdroj uživatelem

hlasů
13

Tady je čistší jQuery implementace, která umožňuje jednu ClientValidationFunction pro libovolný počet CheckBoxList ovládacích prvků na stránce:

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

Zde je značkovací:

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

A konečně, na zakázku validátor, který umožňuje funkce klienta k načtení cílové kontroly podle 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);
    }
}
Odpovězeno 25/10/2010 v 15:59
zdroj uživatelem

hlasů
1

Zde je další řešení, které může být považováno 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" />

Příklad codebehind.aspx.cs

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

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

Ref: Zkontrolujte, zda políčko je zaškrtnuto ve skupině políček na straně klienta

Odpovězeno 16/08/2013 v 16:20
zdroj uživatelem

hlasů
0

Můžete použít CustomValidatorpro to s trochou 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>

A pro 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>
Odpovězeno 31/03/2017 v 12:55
zdroj uživatelem

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