有没有比If-Else-If循环更好的方法来读取RadioButtonList?

时间:2011-08-03 15:17:29

标签: asp.net if-statement radiobuttonlist groupname

我有一个大型的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。

〜阿伦

编辑:我正在使用单独的RadioButton并将它们与GroupName绑在一起。不使用RadioButtonList。对此感到抱歉。

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

3 个答案:

答案 0 :(得分:2)

您可以尝试使用单选按钮列表。

    "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 :(得分:1)

您可以使用条件运算符,这会使代码更短:

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;
  }
}

答案 2 :(得分:0)

我建议您放置一个围绕它们的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;
                    }
                }
            }

这肯定会有效,但如果您不使用母版页就可以增强它,只需用this.Controls替换mpPane.Controls