リピーター項目内のチェックされたラジオボタンを見つける方法は?
-
08-07-2019 - |
質問
次のように定義されたASPXページに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>
時間内に1つのラジオボタンのみを選択できるように、トリックフォームを使用しましたこの記事。
しかし、フォームが送信されたときに、どのラジオボタンがチェックされているかを判断したいのです。
これを行うことができます:
RadioButton checkedButton = null;
foreach (RepeaterItem item in answerVariantRepeater.Items)
{
RadioButton control=(RadioButton)item.FindControl("answerVariantRadioButton");
if (control.Checked)
{
checkedButton = control;
break;
}
}
ただし、何らかの方法でもっと簡単にできることを願っています(おそらくLINQ to objectsを使用)。
解決
すでにクライアントでラジオボタンクリックイベントを処理するためにJavaScriptを使用しているため、非表示フィールドを選択した値で同時に更新できます。
サーバーコードは、非表示フィールドから選択した値にアクセスするだけです。
他のヒント
常に Request.Form
送信されたラジオボタンを取得するには:
var value = Request.Form["answerVariants"];
送信された値はデフォルトで選択された<asp:RadioButton />
のidになりますが、正式に<=>プロパティでなくても、いつでもvalue属性を追加でき、これが送信された値になります。
<asp:RadioButton ID="answerVariantRadioButton" runat="server"
GroupName="answerVariants"
Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"
value='<%# DataBinder.Eval(Container.DataItem, "SomethingToUseAsTheValue")%>' />
ここでLINQ to Objectsを使用できるのは、foreachループ内から条件を取得し、where句に移動することだけだと確信しています。
RadioButton checked =
(from item in answerVariantRepeater.Items
let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
where radioButton.Checked
select radioButton).FirstOrDefault();
所属していません StackOverflow