Wie überprüft Radioknopf finden innerhalb Repeater Artikel?
-
08-07-2019 - |
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).
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önntenRadioButton checked =
(from item in answerVariantRepeater.Items
let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
where radioButton.Checked
select radioButton).FirstOrDefault();