Поиск выбранного значения Radiobutton в ASP.NET

Платформа кодирования: ASP.NET 4.0 WebForms с С#

У меня есть два элемента управления 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 из набора RadioButtons с тем же GroupName? А если нет, то каковы указатели на письмо?

P.S: Невозможно использовать RadioButtonList в этом сценарии.

Ответы

Ответ 1

Вы хотите сделать это:

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 с той же группой, у вас есть 2 варианта:

  • Получить их в отдельных контейнерах
  • Добавить групповой фильтр в выражение lamdba, поэтому он выглядит так:

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

Обновление 2

Изменен код, чтобы сделать его более надежным с ошибкой, гарантируя, что он не сбой, если не выбран RadioButton.

Ответ 2

Вы можете попытаться записать аналогичный метод ниже:

    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, если хотите.