2008-11-14 8 views
8

Ich habe ein Repeater-Steuerelement auf ASPX-Seite wie folgt definiert:Wie findet man den RadioButton im Repeater?

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

Damit wählen Sie nur ein Optionsfeld in der Zeit ich einen Trick Form this article verwendet haben.

Aber jetzt, wenn das Formular gesendet wird, möchte ich bestimmen, welches Optionsfeld aktiviert ist.

konnte ich dies tun:

RadioButton checkedButton = null; 

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

aber hoffen, dass es (vielleicht über LINQ to Objekte) irgendwie simplier getan werden könnte.

Antwort

2

Da Sie bereits JavaScript verwenden, um das Radio-Button-Klick-Ereignis auf dem Client zu bearbeiten, können Sie ein ausgeblendetes Feld mit dem ausgewählten Wert gleichzeitig aktualisieren.

Ihr Servercode würde dann nur auf den ausgewählten Wert aus dem versteckten Feld zugreifen.

+0

Entweder das Original so Lösung in Ihrer Frage oder das wird gut funktionieren. – Kon

2

Ich bin mir ziemlich sicher, dass das einzige, was Sie LINQ to Objects für hier verwenden könnten, wäre, die Bedingungen innerhalb der foreach-Schleife zu übernehmen und sie in eine where-Klausel zu verschieben.

RadioButton checked = 
    (from item in answerVariantRepeater.Items 
    let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton") 
    where radioButton.Checked 
    select radioButton).FirstOrDefault(); 
+0

Vielleicht ist es möglich, die Verwendung von Items und FindControl zugunsten einiger Controls-Sammlungen zu vermeiden. –

+0

Ich habe noch nie eine andere Möglichkeit gesehen, eine Instanz eines Steuerelements von einem übergeordneten Steuerelement zu erhalten. Am einfachsten wäre es, eine RadioButtonList zu verwenden, aber ich nehme an, dass Ihr Beispiel zur besseren Übersichtlichkeit vereinfacht wurde und dass andere Steuerelemente in der Vorlage die Verwendung dieser Option verhinderten. –

6

Sie immer Request.Form nutzen, um die eingereichten Optionsfeld zu bekommen:

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

Ich denke, die eingereichten Wert standardmäßig auf die ID des <asp:RadioButton />, die ausgewählt wurde, aber man kann immer einen Wert Attribut hinzufügen - obwohl es nicht offiziell eine <asp:RadioButton /> Eigenschaft ist - und dies wird dann der vorgelegte Wert sein: