EDIT: Обновленный вопрос, основанный на комментариях и разъяснениях.
Если вы проверяете множественные RadioButtonList
s, вам необходимо использовать CustomValidator
и реализовать проверку на стороне сервера.
Вот некоторый тест разметка:
<asp:RadioButtonList ID="rblstTest1" runat="server" ValidationGroup="Test">
<asp:ListItem Text="Test 1" Value="1" />
<asp:ListItem Text="Test 2" Value="2" />
<asp:ListItem Text="Test 3" Value="3" />
</asp:RadioButtonList>
<br /><br />
<asp:RadioButtonList ID="rblstTest2" runat="server" ValidationGroup="Test">
<asp:ListItem Text="Test 1" Value="1" />
<asp:ListItem Text="Test 2" Value="2" />
<asp:ListItem Text="Test 3" Value="3" />
</asp:RadioButtonList><br />
<asp:Button ID="btnTestRb" runat="server" ValidationGroup="Test" Text="Test RBL"
OnClick="btnTestRb_Click" />
<asp:CustomValidator runat="server" ValidationGroup="Test" ID="cvTest"
ControlToValidate="rblstTest1" OnServerValidate="cvTest_ServerValidate"
ValidateEmptyText="true" Enabled="true" display="Dynamic" SetFocusOnError="true"
ErrorMessage="You must select at least one item." />
Используйте следующий метод расширения, чтобы найти все RadioButtonList
управления (Source):
static class ControlExtension
{
public static IEnumerable<Control> GetAllControls(this Control parent)
{
foreach (Control control in parent.Controls)
{
yield return control;
foreach (Control descendant in control.GetAllControls())
{
yield return descendant;
}
}
}
}
Затем реализовать на сторону сервера CustomValidator
проверки:
protected void cvTest_ServerValidate(object sender, ServerValidateEventArgs e)
{
int count = this.GetAllControls().OfType<RadioButtonList>().
Where(lst => lst.SelectedItem != null).Count();
e.IsValid = (count > 0);
}
Я тестировал приведенный выше пример и, похоже, делает именно то, что вам нужно. Вы можете легко переключить его на VB. Надеюсь, это решает вашу проблему.
Просто, чтобы уточнить, у меня есть 20 разных списков RadioButtonLists. Нет обязательных полей, но мне нужно, чтобы хотя бы один из них был заполнен до того, как форма будет отправлена. – Tom