Есть ли лучший способ прочитать список RadioButtonList, чем циклы If-Else-If? - PullRequest
0 голосов
/ 03 августа 2011

У меня большой RadioButtonList (около 20 элементов), и мне нужно проверить, какой из них был выбран, чтобы вернуть это значение в отправленном электронном письме (это форма электронной почты).

Сейчас я работаюбольшой цикл If-Else-If для анализа каждой кнопки RadioButton, чтобы выяснить, какой из них был выбран:

           if (PriMsg_AP_1.Checked)
            {
                message.Body += "<b>Primary Message:</b> " + PriMsg_AP_1.Text;
            }
            else if (PriMsg_AP_2.Checked)
            {
                message.Body += "<b>Primary Message:</b> " + PriMsg_AP_2.Text;
            }
            else if (PriMsg_Devices_1.Checked)
            {
                message.Body += "<b>Primary Message:</b> " + PriMsg_Devices_1.Text;
            }
            else if (PriMsg_SMB_1.Checked)
            {
                message.Body += "<b>Primary Message:</b> " + PriMsg_SMB_1.Text;
            }
            else if (PriMsg_SMB_2.Checked)
            {
                message.Body += "<b>Primary Message:</b> " + PriMsg_SMB_2.Text;
            }
            else if (PriMsg_SMB_3.Checked)
            {
                message.Body += "<b>Primary Message:</b> " + PriMsg_SMB_3.Text;
            }
            else if (PriMsg_Vertical_1.Checked)
            {
                message.Body += "<b>Primary Message:</b> " + PriMsg_Vertical_1.Text;
            }
            else if (PriMsg_Vertical_2.Checked)
            {
                message.Body += "<b>Primary Message:</b> " + PriMsg_Vertical_2.Text;
            }

и т. д.

Как вы можете видеть, он довольно длинный и для менядумаю, что есть более простой способ разобрать этот список.Как запустить все через цикл For?Но не знаю, как это сделать, поскольку каждое RadioButton имеет свое имя ...

Некоторые предостережения: список разбит на несколько категорий, поэтому не все RadioButton находятся на одном экране, поэтому у меня весь список связан сGroupName, чтобы пользователь мог выбрать только один элемент.

Мысли?Предложения?

Я работаю в ASP.NET над этим проектом.

~ Allen

Редактировать: я использую отдельные кнопки RadioButton и связываю их вместе с GroupName.Не использует RadioButtonList.Извините за путаницу.

<asp:RadioButton ID="PriMsg_AP_1" GroupName="PriMsg" runat="server" text="Promo 1" CssClass="radiobutton" />

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

Вы можете попробовать использовать список переключателей.

    "rlist1.SelectedItem.Text in code behind"

выдаст вам выбранный текст переключателя.

    <asp:RadioButtonList runat="server" ID="rlist1">
        <asp:ListItem Text="a">
        </asp:ListItem>
        <asp:ListItem Text="b">
        </asp:ListItem>
    </asp:RadioButtonList>
1 голос
/ 03 августа 2011

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

message.Body += "<b>Primary Message:</b> " +
  PriMsg_AP_1.Checked ? PriMsg_AP_1.Text :
  PriMsg_AP_2.Checked ? PriMsg_AP_2.Text :
  PriMsg_Devices_1.Checked ? PriMsg_Devices_1.Text :
  PriMsg_SMB_1.Checked ? PriMsg_SMB_1.Text :
  PriMsg_SMB_2.Checked ? PriMsg_SMB_2.Text :
  PriMsg_SMB_3.Checked ? PriMsg_SMB_3.Text :
  PriMsg_Vertical_1.Checked ? PriMsg_Vertical_1.Text :
  PriMsg_Vertical_2.Checked ? PriMsg_Vertical_2.Text :
  "No message";

Другая альтернатива - поместить все переключатели в коллекцию, чтобы вы могли проходить по ним:

RadioButton[] radios = new RadioButton[] {
  PriMsg_AP_1, PriMsg_AP_2, PriMsg_Devices_1,
  PriMsg_SMB_1, PriMsg_SMB_2, PriMsg_SMB_3,
  PriMsg_Vertical_1, PriMsg_Vertical_2
};
foreach (RadioButton radio in radios) {
  if (radio.Checked) {
    message.Body += "<b>Primary Message:</b> " + radio.Text;
    break;
  }
}
0 голосов
/ 03 августа 2011

Я предлагаю вам поместить панель asp, которая окружает их всех, и зациклить на этой панели, используя следующий код

foreach (Control c in myPanel.Controls)
            {
                if(c.GetType() == typeof(RadioButton))
                {
                    if(((RadioButton)c).Checked)
                    {
                        message.Body += "<b>Primary Message:</b> " + ((RadioButton)c).Text;
                    }
                }
            }

это будет работать, но может быть улучшено, если вы не используете главную страницу, вы можете просто заменить mpPane.Controls на this.Controls

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