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>

为了允许及时选择一个单选按钮,我使用了本文的技巧。

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

我可以这样做:

RadioButton checkedButton = null;

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

但希望它可以以某种方式更简单地完成(可能通过 LINQ to 对象)。

4

3 回答 3

7

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

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

我认为提交的值默认为<asp:RadioButton />所选的 id,但您始终可以添加 value 属性 - 即使它不是正式的<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 回答