2011-04-20 59 views
15

Tengo dos controles asp:RadioButton que están teniendo el mismo GroupName que esencialmente los hace mutuamente excluyentes.¿Cómo puedo encontrar el valor de RadioButton seleccionado en ASP.NET?

Mi marcado:

<asp:RadioButton ID="OneJobPerMonthRadio" runat="server" 
     CssClass="regtype" 
     GroupName="RegistrationType" 
     ToolTip="125"/> 
<asp:RadioButton ID="TwoJobsPerMonthRadio" runat="server" 
     CssClass="regtype" 
     GroupName="RegistrationType" 
     ToolTip="200"/> 

Mi intención era encontrar la información sobre herramientas/texto de la RadioButton que se comprueba. Tengo este código detrás:

int registrationTypeAmount = 0; 
if (OneJobPerMonthRadio.Checked) 
{ 
    registrationTypeAmount = Convert.ToInt32(OneJobPerMonthRadio.ToolTip); 
} 
if (TwoJobsPerMonthRadio.Checked) 
{ 
    registrationTypeAmount = Convert.ToInt32(TwoJobsPerMonthRadio.ToolTip); 
} 

Encontré ese código feo y redundante. (¿Qué pasa si tengo 20 casillas de verificación?)

¿Hay algún método que obtenga el RadioButton marcado de un conjunto de RadioButtons con el mismo GroupName? Y si no, ¿cuáles son los indicadores para escribir uno?

P.S: No puedo usar un RadioButtonList en este escenario.

Respuesta

16

que quieres hacer esto:

RadioButton selRB = radioButtonsContainer.Controls.OfType<RadioButton>().FirstOrDefault(rb => rb.Checked); 
if(selRB != null) 
{ 
    int registrationTypeAmount = Convert.ToInt32(selRB.ToolTip); 
    string cbText = selRB.Text; 
} 

donde radioButtonsContainer es el contenedor de los botones de radio.

actualización

Si desea asegurarse de que obtiene RadioButtons con el mismo grupo, tienes 2 opciones:

  • Obtener en recipientes separados
  • Agregar el filtro de grupo a la expresión de lamdba, por lo que se ve así:

    rb => rb.Checked && rb.GroupName == "YourGroup"

Actualización 2

modificado el código para que sea un poco más falla la prueba, garantizando que no se producirá un error si no hay RadioButton seleccionada.

+0

+1: muy buena idea. Sin embargo, no tendré un control de contenedor asp.net (runat = "server") cada vez. – naveen

+0

Si no tiene un contenedor declarado, use la página y busque por grupo según lo sugerido. –

+0

¿Cómo funcionó esta sugerencia para usted? –

1

Es posible que trate de escribir un método similar a la de abajo:

private RadioButton GetSelectedRadioButton(params RadioButton[] radioButtonGroup) 
    { 
     // Go through all the RadioButton controls that you passed to the method 
     for (int i = 0; i < radioButtonGroup.Length; i++) 
     { 
      // If the current RadioButton control is checked, 
      if (radioButtonGroup[i].Checked) 
      { 
       // return it 
       return radioButtonGroup[i]; 
      } 
     } 

     // If none of the RadioButton controls is checked, return NULL 
     return null; 
    } 

A continuación, se puede llamar al método como este:

RadioButton selectedRadio = 
      GetSelectedRadioButton(OneJobPerMonthRadio, TwoJobsPerMonthRadio); 

volverá al seleccionado (si hay es) y funcionará sin importar cuántos botones de radio tenga. Puede volver a escribir el método para que devuelva SelectedValue, si lo desea.

+0

Lo usé con "System.Web.UI.HtmlControls.HtmlInputRadioButton" en lugar de solo "RadioButton" en mi proyecto y funcionó muy bien. ¡Gracias! – kogh

Cuestiones relacionadas