Поиск выбранного значения 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, если хотите.