私は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
を使用できません。
あなたはこれをしたい:
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が選択されていない場合に失敗しないようにすることで、コードをもう少し失敗しないように変更しました。
以下のような方法を書き留めてみてください。
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を返すようにメソッドを書き直すことができます。