如何在Repeater项目中找到已检查的单选按钮?

时间:2008-11-14 13:06:20

标签: asp.net javascript repeater radio-button

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

为了允许我只选择一个单选按钮,我使用了一种技巧形式this article

但是现在提交表单时,我想确定选中了哪个单选按钮。

我可以这样做:

RadioButton checkedButton = null;

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

但希望它能以某种方式简化(可能通过LINQ到对象)。

3 个答案:

答案 0 :(得分:7)

您始终可以使用Request.Form来获取提交的单选按钮:

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

我认为提交的值默认为已选择的<asp:RadioButton />的ID,但您始终可以添加值属性 - 即使它不是正式的<asp:RadioButton />属性 - 然后这将是提交的值:

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

答案 1 :(得分:2)

由于您已经使用javascript来处理客户端上的单选按钮单击事件,因此您可以同时使用所选值更新隐藏字段。

您的服务器代码只会从隐藏字段中访问所选值。

答案 2 :(得分: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();