9

次のように定義された 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を介して)。

4

3 に答える 3

7

Request.Form送信されたラジオボタンを取得するためにいつでも使用できます。

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

送信された値は、デフォルトで選択された の id になると思いますが、値属性をいつでも追加できます-公式のプロパティ<asp:RadioButton />ではありませんが-これが送信された値になります:<asp:RadioButton />

<asp:RadioButton ID="answerVariantRadioButton" runat="server"
    GroupName="answerVariants" 
    Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"
    value='<%# DataBinder.Eval(Container.DataItem, "SomethingToUseAsTheValue")%>' />
于 2011-05-05T11:14:56.207 に答える
2

クライアントでラジオ ボタンのクリック イベントを処理するために既に JavaScript を使用しているため、非表示フィールドを選択した値で同時に更新できます。

サーバーコードは、非表示フィールドから選択された値にアクセスするだけです。

于 2008-11-14T14:40:01.467 に答える
2

ここで LINQ to Objects を使用できるのは、foreach ループ内から条件を取得して where 句に移動することだけだと確信しています。

RadioButton checked = 
    (from item in answerVariantRepeater.Items
    let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
    where radioButton.Checked
    select radioButton).FirstOrDefault();
于 2008-11-14T14:49:45.037 に答える