asp.net - 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>
我希望我能够澄清我的问题。
解决方案
这可以通过 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>
推荐阅读
- google-cloud-platform - 如何按实例名称获取 GCP 计费?(不是按类型),资源和计费 sku id 之间是否存在关联?
- arrays - 如何在数组中获取存储过程的输出值
- android - Appstate 不断在 Android 中的 React Native 中获得变化
- javascript - 在 django 中使用 clusterize.js 库
- powerbi - 北风数据库星型模式
- javascript - WooCommerce Hook ( woocommerce_order_status_changed ) 无法运行 javascript
- warpscript - GTS 格式/Warpscript:提供 LAT 和 LON 值的最佳实践?
- flutter - Flutter - CheckboxListTile - 边框颜色白色
- memory-management - PCIe 端点设备内存如何映射到系统内存映射 (MMIO)?
- amazon-web-services - 允许从 API Gateway 到私有 ALB 的请求