首页 > 解决方案 > ASP.NET 验证中继器中的多个复选框列表

问题描述

我正在开展可能对用户有多个问题的活动。每个问题的类型可以是文本框、单选按钮列表、下拉列表和复选框列表。

我有一个重复器用于显示问题,其中每个项目都有一个具有单一或多种类型答案的问题。

我正在尝试验证用户是否回答了问题。我从后面的代码动态分配验证控件(重复项绑定)我能够验证文本框、单选按钮列表和下拉列表,但不能验证复选框列表。

据我了解,必填字段验证器不能直接用于复选框列表。我们必须在 JavaScript 中编写一个自定义验证器函数。

我搜索的示例主要包含每个转发器项目的单个复选框。

而在我的情况下,复选框列表(多个复选框)可能有多个问题。

验证此类复选框列表的最佳方法是什么?

这是我的转发器内容模板内容:

<div class="row validation-container">
    <div class="col-md-12 col-lg-12">
       <asp:TextBox ID="txtAnswer" CssClass="form-control" runat="server" TextMode="MultiLine" Rows="2" ValidationGroup="Campaign"></asp:TextBox>

       <asp:RadioButtonList ID="rdAnswer" runat="server"></asp:RadioButtonList>

       <asp:DropDownList ID="ddnAnswer" runat="server"></asp:DropDownList>

       <asp:CheckBoxList ID="chkAnswer" CssClass="chkAnswer" runat="server"></asp:CheckBoxList>

       <asp:Label ID="lbAnswerRequired" runat="server" Visible="false" style="color:#f00"/>

       <asp:RequiredFieldValidator ID="reqValidator" runat="server" Display="Dynamic" style="color: #f00" />

       <asp:CustomValidator ID="customValidator" runat="server" />
       <hr />
       </div>
   </div>
</ItemTemplate>

我希望我能够澄清我的问题。

标签: asp.net

解决方案


这可以通过 CustomValidator 和一些 javscript 来完成。要使此示例正常工作, theCustomValidator和 theCheckBoxList必须在相同的div.

<script>
    function checkRadioOrCheckboxList(id) {
        var isValid = false;
        $('#' + id + ' input').each(function () {
            if ($(this).prop("checked")) {
                isValid = true;
            }
        });
        return isValid;
    }

    function chkAnswer(sender, element) {
        var id = $('#' + sender.id).closest('div').find('.chkAnswer').prop('id');
        element.IsValid = checkRadioOrCheckboxList(id);
    }
</script>

ASPX 示例

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>

        <div>
            <asp:CheckBoxList ID="chkAnswer" CssClass="chkAnswer" runat="server">
                <asp:ListItem>Item 1</asp:ListItem>
                <asp:ListItem>Item 2</asp:ListItem>
                <asp:ListItem>Item 3</asp:ListItem>
            </asp:CheckBoxList>
            <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Select a CheckBox" ClientValidationFunction="chkAnswer"></asp:CustomValidator>
        </div>
        <hr />

    </ItemTemplate>
</asp:Repeater>

推荐阅读