2011-08-03 4 views
0

큰 RadioButtonList (약 20 개 항목)가 있으며 제출 된 전자 메일 (전자 메일 양식)을 사용하여 해당 값을 반환하기 위해 어느 RadioButtonList가 선택되었는지 확인해야합니다.If-Else-If 루프보다 RadioButtonList를 읽는 더 좋은 방법이 있습니까?

지금은하고 있는데 큰 경우 - 그렇지 않으면 루프 하나가 선택 된 찾아 각각의 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이 다른 이름을 가지고 있기 때문에 그 방법을 확신하지 못합니다 ...

일부주의 사항 : 목록은 여러 범주로 나뉘어 있으므로 모든 라디오 단추가 한 화면에 나타나지 않으므로 전체 목록이 GroupName과 연결됩니다. 사용자는 하나의 항목 만 선택할 수 있습니다.

생각하십니까? 제안?

저는이 프로젝트에서 ASP.NET으로 작업하고 있습니다.

~ 알렌

편집 : 개별 RadioButtons를를 사용하고 그룹 이름과 함께 그들을 묶는거야. 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

두 번째 옵션을 사용하고 잘 작동했습니다. 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로 바꿀 수 있습니다.