2011-08-03 4 views
0

大きなRadioButtonList(約20項目)があり、送信された電子メール(電子メール形式)でその値を返すために選択されたものを確認する必要があります。If-Else-IfループよりもRadioButtonListを読み取る良い方法はありますか?

今私が実行している大規模な場合は、そうでない場合、ループは1が選択されたかを調べるために、それぞれの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が異なる名前を持っているので、それを行う方法がわからない...

いくつかの注意点:リストは複数のカテゴリで壊れているので、すべてのラジオボタンが1つの画面に表示されるわけではないので、リスト全体をGroupNameユーザーが1つのアイテムのみを選択できること。

思考?提案?

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

〜アレン

編集:私は、個々のラジオボタンを使用してとグループ名と一緒にそれらを結びますよ。 RadioButtonListを使用していません。混乱をおかけして申し訳ありません。

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

関連:http://stackoverflow.com/questions/5732540/finding-the-selected-radiobuttons-value-in-asp-netそれを試しましたか? – naveen

+0

naveen - 有望です。今日の午後にそれを試み、あなたに知らせます。 – Valien

+0

RadioButtonListのようには見えません。あなたはRadioButtonsのリストを使用していますか? RadioButtonListの場合、RadioButtonList1.SelectedItem.Valueを使用することができます – Win

答えて

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

それはかなり面白いです。それは確かに短くなるでしょう。それを渦巻きにして、それがどのように機能するか見ることができます。 – Valien

+0

私はあなたの2番目のオプションを使用し、素晴らしい仕事をした。 if-then-else文の量を減らし、少しだけそれを整理します。ありがとう! – Valien

2

ラジオボタンリストを試すことができます。

は、ラジオボタンのテキストを選択します。

<asp:RadioButtonList runat="server" ID="rlist1"> 
     <asp:ListItem Text="a"> 
     </asp:ListItem> 
     <asp:ListItem Text="b"> 
     </asp:ListItem> 
    </asp:RadioButtonList> 
0

私はあなたが

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

が、これは確かに動作します、次のコードを使用して、このパネル上でそれらすべてのループを囲み、ASPパネルを置くことを示唆しているが、あなたが使用していない場合は、それを向上させることができますマスターページでは、単にmpPane.Controlsをthis.Controlsに置き換えることができます

関連する問題