Как я могу найти значение выбранного RadioButton в ASP.NET? - PullRequest
15 голосов
/ 20 апреля 2011

У меня есть два 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 ]

16 голосов
/ 20 апреля 2011

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

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.

1 голос
/ 04 декабря 2013

Вы можете попробовать записать метод, подобный приведенному ниже:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...