Как проверить пользователь выбрал хотя бы один флажок в CheckBoxList?

голоса
33

У меня есть контроль CheckBoxList, что я хочу, чтобы требовать от пользователя, чтобы проверить, по крайней мере один ящик, это не имеет значения, если они проверяют каждый один, или 3, или даже только один.

В духе управления проверкой ASP.NET, в то, что я могу использовать, чтобы обеспечить соблюдение этого? Я также с помощью проверки расширителя Ajax, поэтому было бы хорошо, если бы он мог бы выглядеть, как и другие элементы управления, а не какой-то дрянной метод сервера Validate в коде.

<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>
Задан 18/07/2009 в 01:09
источник пользователем
На других языках...                            


6 ответов

голоса
0

Цикл по каждому из пунктов в ckBoxListReasons. Каждый элемент будет иметь тип «ListItem».

ListItem будет иметь свойство «Selected», который является логическим. Это правда, если выбран этот пункт. Что-то вроде:

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

bolSelectionMade будет установлен верно , если пользователь сделал по крайней мере , один выбор. Затем вы можете использовать, чтобы установить действительное положение любого конкретного элемента управления валидатора вам нравится.

Надеюсь это поможет!

Ричард.

Ответил 18/07/2009 в 02:17
источник пользователем

голоса
59

Это легко сделать эту сторону проверки сервера, но я предполагаю, что вы хотите сделать это на стороне клиента?

JQuery может сделать это очень легко до тех пор , пока у вас есть что - то , что все галочки имеет в общем , чтобы использовать в качестве селектора , таких как класс (CssClass в системе управления .NET). Вы можете сделать простой JQuery функции и подключить его к ASP.NET валидатора. Помните , если вы идете на заказ валидатор маршрут , чтобы убедиться , что вы проверить его на сторону сервера , а также в случае , если Javascript не работает, вы не получите бесплатную сторону сервера проверки , как и другие .NET валидаторов.

Для получения дополнительной информации о пользовательских валидаторах проверить следующие ссылки: www.asp.net и MSDN

Вам не нужно использовать JQuery , он просто делает яваскрипт функции итерации и посмотреть на всем ваш флажке контролирует гораздо проще , но вы можете просто использовать ваниль Javascript , если вам нравится.

Вот пример , который я нашел на сайте : Ссылка на оригинал

<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 Примечание: JQuery просто немного JS файл включить вам нужно добавить на страницу. После того, как вы его включали вы можете использовать все JQuery вам нравится. Ничего не устанавливать , и она будет полной поддерживаться в следующей версии Visual Studio , я думаю.

Ответил 18/07/2009 в 02:33
источник пользователем

голоса
3

Проверьте эту статью из 4 Ребят из Rolla:

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

Они показывают, как создать валидатор для управления CheckBox и CheckBoxList, который работает так же, как RequiredFieldValidator для другого управления .NET. Она имеет на стороне сервера проверки и проверки на стороне клиента. Хорошая часть о том, что это можно указать ValidationGroup и он будет работать с контролем ValidationSummary.

Существует также ссылка в нижней части этой статьи, чтобы загрузить исходный код и использовать его в вашем проекте. Вы просто ссылаться на DLL и зарегистрировать элементы управления, и вы хорошо идти.

Ответил 18/07/2009 в 03:22
источник пользователем

голоса
13

Вот уборщик JQuery реализация , которая позволяет одному ClientValidationFunction для любого числа CheckBoxList управления на странице:

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

Вот разметка:

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

И, наконец, валидатор, что позволяет функции клиента для получения целевого управления по 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);
    }
}
Ответил 25/10/2010 в 15:59
источник пользователем

голоса
1

Вот еще одно решение , которое можно рассматривать с помощью Dado.Validators на 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" />

Пример codebehind.aspx.cs

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

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

Ref: Проверьте , если установлен флажок в группе флажков в клиентской

Ответил 16/08/2013 в 16:20
источник пользователем

голоса
0

Вы можете использовать CustomValidatorдля этого с немного 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>

И для 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>
Ответил 31/03/2017 в 12:55
источник пользователем

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