我有两个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
的RadioButton中获取已检查的GroupName
?如果没有,写一个的指针是什么?
P.S:在这种情况下我无法使用RadioButtonList
。
答案 0 :(得分:16)
你想这样做:
RadioButton selRB = radioButtonsContainer.Controls.OfType<RadioButton>().FirstOrDefault(rb => rb.Checked);
if(selRB != null)
{
int registrationTypeAmount = Convert.ToInt32(selRB.ToolTip);
string cbText = selRB.Text;
}
其中radioButtonsContainer是radiobuttons的容器。
<强>更新强>
如果您想确保让RadioButtons具有相同的组,您有两个选择:
将组过滤器添加到lamdba表达式中,如下所示:
rb => rb.Checked && rb.GroupName == "YourGroup"
更新2
修改代码,通过确保在没有选择RadioButton的情况下不会失败,使代码更加失败。
答案 1 :(得分:1)
您可以尝试写下类似的方法:
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。