0

大きな 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 が 1 つの画面に表示されるわけではないため、リスト全体を GroupName に関連付けて、ユーザーが 1 つの項目のみを選択できるようにします。

考え?提案?

私はこのプロジェクトで ASP.NET を使用しています。

〜アレン

編集: 個々の RadioButton を使用して、それらを GroupName で結び付けています。RadioButtonList を使用しない。混乱して申し訳ありません。

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

3 に答える 3

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>
于 2011-08-03T15:33:28.043 に答える
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;
  }
}
于 2011-08-03T15:31:02.777 に答える
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;
                    }
                }
            }

これは確かに機能しますが、マスターページを使用していない場合は、mpPane.Controls を this.Controls に置き換えるだけで拡張できます。

于 2011-08-03T17:52:09.287 に答える