web-dev-qa-db-ja.com

選択したRadioButtonの値をASP.NETで見つけるにはどうすればよいですか?

私は2つを持っています asp:RadioButton同じGroupNameを持つコントロール。これにより、本質的に相互に排他的になります。

私のマークアップ:

<asp:RadioButton ID="OneJobPerMonthRadio" runat="server" 
        CssClass="regtype"
        GroupName="RegistrationType"
        ToolTip="125"/>
<asp:RadioButton ID="TwoJobsPerMonthRadio" runat="server" 
        CssClass="regtype"
        GroupName="RegistrationType"
        ToolTip="200"/>

私の意図は、チェックされているRadioButtonのツールチップ/テキストを見つけることでした。私はこのコードビハインドを持っています:

int registrationTypeAmount = 0;
if (OneJobPerMonthRadio.Checked)
{
    registrationTypeAmount = Convert.ToInt32(OneJobPerMonthRadio.ToolTip);
}
if (TwoJobsPerMonthRadio.Checked)
{
    registrationTypeAmount = Convert.ToInt32(TwoJobsPerMonthRadio.ToolTip);
}

そのコードは醜く冗長だと思います。 (20個のチェックボックスがある場合はどうなりますか?)

同じRadioButtonを持つラジオボタンのセットからチェックされたGroupNameを取得するメソッドはありますか?そうでない場合は、それを書く上での指針は何ですか?

追伸:このシナリオではRadioButtonListを使用できません。

15
naveen

あなたはこれをしたい:

RadioButton selRB = radioButtonsContainer.Controls.OfType<RadioButton>().FirstOrDefault(rb => rb.Checked);
if(selRB != null)
{
    int registrationTypeAmount = Convert.ToInt32(selRB.ToolTip);
    string cbText = selRB.Text;
}

ここで、radioButtonsContainerはラジオボタンのコンテナです。

更新

同じグループでRadioButtonを確実に取得したい場合は、次の2つのオプションがあります。

  • それらを別々の容器に入れてください
  • グループフィルターをlamdba式に追加すると、次のようになります。

    rb => rb.Checked && rb.GroupName == "YourGroup"

アップデート2

RadioButtonが選択されていない場合に失敗しないようにすることで、コードをもう少し失敗しないように変更しました。

16
Adrian Carneiro

以下のような方法を書き留めてみてください。

    private RadioButton GetSelectedRadioButton(params RadioButton[] radioButtonGroup)
    {
        // Go through all the RadioButton controls that you passed to the method
        for (int i = 0; i < radioButtonGroup.Length; i++)
        {
            // If the current RadioButton control is checked,
            if (radioButtonGroup[i].Checked)
            {
                // return it
                return radioButtonGroup[i];
            }
        }

        // If none of the RadioButton controls is checked, return NULL
        return null;
    }

次に、次のようにメソッドを呼び出すことができます。

RadioButton selectedRadio = 
             GetSelectedRadioButton(OneJobPerMonthRadio, TwoJobsPerMonthRadio);

選択したもの(ある場合)が返され、ラジオボタンの数に関係なく機能します。必要に応じて、SelectedValueを返すようにメソッドを書き直すことができます。

1
Yulian