我有一个转发器,每行包含一个RadioButtonList。
<asp:Repeater ID="rptAccessories" runat="server" OnItemDataBound="rptAccessories_ItemDataBound">
<ItemTemplate>
<tr>
<td style="display: none">
<asp:Label ID="lblAccID" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</td>
<td>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("name") %>'></asp:Label>
</td>
<%-- POPULATE CONDITION TABLE--%>
<td colspan="6">
<asp:RadioButtonList ID="rblCondition" Width="640px" CssClass="rblist" ValidationGroup ="vag" Style="margin-left: 40px; margin-right: -40px;" RepeatDirection="Horizontal" runat="server"></asp:RadioButtonList>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
但我真的很难找到一种方法来验证单选按钮是否具有选定值。
我尝试过使用RequiredFieldValidator,但是这个错误说它无法找到控件。
我也尝试过使用JQuery,但这又很有挑战性,因为我不知道如何将JQuery传递给RadioButtonList的id,因为它只是在运行时创建的:
$(document).ready(function() {
$('#btnSubmit').on('click', function(e) {
var cnt = $("#rblCondition :radio:checked").length;
if (cnt == 0)
{
alert('Select any option.');
e.preventDefault();
}
else
alert('Well Done!!!!');
});
});
我还尝试设置自定义CSS类并将其用作标识符:
var cnt = $(".required :radio:checked").length;
但这不起作用。
我有种感觉我错过了一些明显的东西......
答案 0 :(得分:1)
您的问题应该在其他地方,因为RequiredFieldValidator
应该适用于您的方案,只要您将其放在ItemTemplate
<td colspan="6">
<asp:RadioButtonList ID="rblCondition" Width="640px"
CssClass="rblist"
ValidationGroup ="vag"
Style="margin-left: 40px; margin-right: -40px;"
RepeatDirection="Horizontal" runat="server">
</asp:RadioButtonList>
<asp:RequiredFieldValidator id="RequiredFieldValidator1"
ControlToValidate="rblCondition"
ErrorMessage="required"
ValidationGroup ="vag"
runat="server"/>
</td>
答案 1 :(得分:0)
如果你想去jQuery路线..渲染的ID将以你给它的ID开头,后跟一个下划线,然后是asp.net让它跟踪它的信息。您可以查看页面的来源以查看实际呈现的HTML。
所以你应该可以使用jQuery Starts With选择器:
$('div[id^="rblCondition_"]').each(function() {
//validate each radio button list
});
请注意,我不是正面的asp.net将容器呈现为div。此外,为了提高效率,在使用开始之前使用更快的选择器过滤结果集可能会更好。