我在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到对象)。
答案 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();