Question

J'ai un contrôle Repeater sur une page ASPX définie comme suit:

<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>

Pour autoriser la sélection d'un seul bouton radio dans le temps, j'ai utilisé un formulaire astuce cet article .

Mais maintenant, lorsque le formulaire est soumis, je souhaite déterminer quel bouton radio est coché.

Je pourrais faire ceci:

RadioButton checkedButton = null;

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

mais espérons que cela pourrait être fait d'une manière plus simple (peut-être via LINQ to object).

Était-ce utile?

La solution

Comme vous utilisez déjà javascript pour gérer l'événement de clic du bouton radio sur le client, vous pouvez mettre à jour un champ masqué avec la valeur sélectionnée en même temps.

Le code de votre serveur n’accédera alors qu’à la valeur sélectionnée à partir du champ masqué.

Autres conseils

Vous pouvez toujours utiliser Request.Form pour obtenir le bouton radio soumis:

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

Je pense que la valeur soumise est définie par défaut sur l'id du <asp:RadioButton /> sélectionné, mais vous pouvez toujours ajouter un attribut value - même s'il ne s'agit pas officiellement d'une propriété <=> - et il s'agira alors de la valeur soumise:

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

Je suis à peu près sûr que la seule chose que vous pouvez utiliser avec LINQ to Objects serait de prendre les conditions dans la boucle foreach et de les déplacer vers une clause where.

RadioButton checked = 
    (from item in answerVariantRepeater.Items
    let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
    where radioButton.Checked
    select radioButton).FirstOrDefault();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top