Pregunta

Tengo un control Repeater en la página ASPX definido así:

<asp:Repeater ID="answerVariantRepeater" runat="server"
    onitemdatabound="answerVariantRepeater_ItemDataBound">
    <ItemTemplate>
        <asp:RadioButton ID="answerVariantRadioButton" runat="server"
            GroupName="answerVariants" 
            Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"/>
    </ItemTemplate>
</asp:Repeater>

Para permitir seleccionar solo un botón de radio a tiempo, he usado un formulario de truco este artículo .

Pero ahora, cuando se envía el formulario, quiero determinar qué botón de opción está marcado.

Podría hacer esto:

RadioButton checkedButton = null;

foreach (RepeaterItem item in answerVariantRepeater.Items)
{
    RadioButton control=(RadioButton)item.FindControl("answerVariantRadioButton");
    if (control.Checked)
    {
        checkedButton = control;
        break;
    }
}

pero espero que se pueda hacer de alguna manera más simple (tal vez a través de LINQ a los objetos).

¿Fue útil?

Solución

Dado que ya está utilizando JavaScript para manejar el evento de clic del botón de opción en el cliente, puede actualizar un campo oculto con el valor seleccionado al mismo tiempo.

El código de su servidor solo accedería al valor seleccionado desde el campo oculto.

Otros consejos

Siempre puede usar Request.Form para obtener el botón de opción enviado:

var value = Request.Form["answerVariants"];

Creo que el valor enviado por defecto es el id del <asp:RadioButton /> que se seleccionó, pero siempre puede agregar un atributo de valor, aunque no sea oficialmente una propiedad <=>, y este será el valor enviado:

<asp:RadioButton ID="answerVariantRadioButton" runat="server"
    GroupName="answerVariants" 
    Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"
    value='<%# DataBinder.Eval(Container.DataItem, "SomethingToUseAsTheValue")%>' />

Estoy bastante seguro de que lo único que podría usar LINQ to Objects aquí sería tomar las condiciones dentro del bucle foreach y moverlas a una cláusula where.

RadioButton checked = 
    (from item in answerVariantRepeater.Items
    let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
    where radioButton.Checked
    select radioButton).FirstOrDefault();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top