我创建了DataList
,其中有Label
和RadioButtonList
。 2 Label
包含问题ID以及隐藏问题ID的问题,RadioButtonList
包含选项。所有这些控制都是有限的。这是代码:
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
<asp:Label ID="Que_id" Visible="false" runat="server" Text='<%# Eval("question_id") %>'></asp:Label>
<asp:Label ID="Question" runat="server" Text='<%# Eval("question") %>'></asp:Label>
<asp:RadioButtonList ID="RadioButtonList1" AutoPostBack="true" RepeatColumns="2" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
</asp:RadioButtonList>
</ItemTemplate>
</asp:DataList>
我想要做的是每当用户在RadioButtonList
所选选项中选择一个选项时,其问题ID应存储在数据库中。在按钮点击事件中存储整个DataList
很容易,但我想在用户选择特定问题的选项时并排存储响应。
我不知道如何在SelectedIndexChanged
事件中获取问题ID,但我在SelectedIndexChanged
上尝试了以下代码来获取所选的选项值,但这也无效。
RadioButtonList rbl = (RadioButtonList)DataList1.FindControl("RadioButtonList1");
string answer=rbl.SelectedValue;
为了进一步说明,我在DataSet
中将数据从数据库中提取出来,并根据问题ID,问题和选项对其进行过滤。这些值在if(!IsPostBack)的Page_Load期间设置。
答案 0 :(得分:0)
尝试以下,
修改
<asp:DataList ID="DataList1" runat="server">
要
<asp:DataList ID="DataList1" OnItemCommand="DataList1_command" runat="server">
假设您有<asp:Button
且ID为button1
且OnClick为bclick
void bclick(object sender, DataListCommandEventArgs e)
{
foreach (DataListItem item in DataList1.Items)
{
HtmlInputRadioButton radio = (item.FindControl("radioButton") as HtmlInputRadioButton);
if (radio.Checked)
{
// this is you checked radio
}
}
}
答案 1 :(得分:0)
您可以使用HiddenField将问题ID存储在DataList中(它更像是#34;自然&#34;而不是不可见的标签):
<asp:HiddenField ID="hiddenQuestionID" runat="server" Value='<%# Eval("question_id") %>' />
在RadioButtonList的事件处理程序中,您可以使用sender
参数来检索控件,然后获取所选值。 RadioButtonList的NamingContainer
还包含HiddenField,您可以从中获取问题ID:
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
RadioButtonList rbl = sender as RadioButtonList;
string answer = rbl.SelectedValue;
HiddenField hiddenQuestionID = rbl.NamingContainer.FindControl("hiddenQuestionID") as HiddenField;
string questionID = hiddenQuestionID.Value;
...
}