如何在ASP.NET中找到所选的RadioButton值?

时间:2011-04-20 15:07:34

标签: c# asp.net linq radio-button

我有两个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

2 个答案:

答案 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。