2011-02-28 11 views

答えて

2

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に簡単に切り替えることができるはずです。これがあなたの問題を解決することを願っています。

+0

明確にするために、私は20種類のRadioButtonListsを持っています。必要なフィールドはありませんが、フォームを提出する前に少なくとも1つは記入する必要があります。 – Tom

0

あなたは、ユーザーがオプションを選択しませんでしたし、中で指摘したように、あなたが

<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のためのデフォルトを設定することができそれ以下のコメントは、検証の手段としてはそれだけでは十分ではありません。サーバー側でもすべてのユーザー入力を検証することをお勧めします。

+0

のために働く拡張メソッドを使用します。それを強制するためにコンパニオンコードがサーバー側に必要です。 –

+0

絶対に良い点。私は私の答えを更新します。 –

0

私はこれはまだしかし、httpリクエストは、ラジオボタンのオプションを使用せずに細工することができるようになるListControls

 public static bool IsAnyItemSelected(this ListControl input) { return input.Items.Cast<ListItem>().Aggregate(false, (current, listItem) => current | listItem.Selected); } 
関連する問題