Frage

Ich habe ein Repeater-Steuerelement auf ASPX-Seite wie folgt definiert:

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

auswählen, um nur ein Optionsfeld in der Zeit ich einen Trick Form verwendet dieser Artikel .

Aber jetzt, wenn Formular abgeschickt wird möchte ich feststellen, welche Optionsfeld aktiviert ist.

Ich kann dies tun:

RadioButton checkedButton = null;

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

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

War es hilfreich?

Lösung

Da Sie Javascript verwenden bereits das Optionsfeld Click-Ereignis auf dem Client zu handhaben, man zugleich ein verstecktes Feld mit dem gewählten Wert aktualisieren könnte.

Ihr Server-Code würde dann Zugriff nur den ausgewählten Wert aus dem verborgenen Bereich.

Andere Tipps

Sie können immer verwenden Request.Form erhält das eingereichten Optionsfeld:

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 - auch wenn es nicht offiziell eine <asp:RadioButton /> Eigenschaft ist - und das wird dann der übermittelte Wert:

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

Ich bin mir ziemlich sicher, dass das einzige, was Sie LINQ to Objects für hier die Bedingungen von nehmen wäre innerhalb der foreach-Schleife und verschieben Sie sie in einem where-Klausel.

verwenden könnten
RadioButton checked = 
    (from item in answerVariantRepeater.Items
    let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
    where radioButton.Checked
    select radioButton).FirstOrDefault();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top