私はページに20 RadioButtonList
を持っています。少なくとも1つのRadioButtonListに項目が選択されていることを確認するにはどうすればよいですか?
RadioButtonList
のうち少なくとも1つに項目が選択されていることを確認するには、検証方法を作成する必要があります。
これにはどのような検証が必要ですか?
私はページに20 RadioButtonList
を持っています。少なくとも1つのRadioButtonListに項目が選択されていることを確認するにはどうすればよいですか?
RadioButtonList
のうち少なくとも1つに項目が選択されていることを確認するには、検証方法を作成する必要があります。
これにはどのような検証が必要ですか?
EDIT:コメントと解説に基づいて質問が更新されました。
複数のRadioButtonList
に対して妥当性を確認する場合は、を使用してサーバー側のチェックを実装する必要があります。
<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に簡単に切り替えることができるはずです。これがあなたの問題を解決することを願っています。
あなたは、ユーザーがオプションを選択しませんでしたし、中で指摘したように、あなたが
<asp:RadioButtonList ID="RadioButtonList1" runat="server">
<asp:ListItem Selected="True">Never</asp:ListItem>
<asp:ListItem>Twice A Week</asp:ListItem>
<asp:ListItem>Every Day Baby!</asp:ListItem>
</asp:RadioButtonList>
EDIT すべての検証コードを必要としない意味するでしょう、あなたのRadioButtonListのためのデフォルトを設定することができそれ以下のコメントは、検証の手段としてはそれだけでは十分ではありません。サーバー側でもすべてのユーザー入力を検証することをお勧めします。
のために働く拡張メソッドを使用します。それを強制するためにコンパニオンコードがサーバー側に必要です。 –
絶対に良い点。私は私の答えを更新します。 –
私はこれはまだしかし、httpリクエストは、ラジオボタンのオプションを使用せずに細工することができるようになるListControls
public static bool IsAnyItemSelected(this ListControl input) { return input.Items.Cast<ListItem>().Aggregate(false, (current, listItem) => current | listItem.Selected); }
明確にするために、私は20種類のRadioButtonListsを持っています。必要なフィールドはありませんが、フォームを提出する前に少なくとも1つは記入する必要があります。 – Tom