我在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到对象)。

有帮助吗?

解决方案

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

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

其他提示

您可以随时使用 Request.Form 获取提交的单选按钮:

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

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

<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();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top