以随机顺序将数据添加到RadioButtonList

时间:2014-07-04 15:04:51

标签: c# asp.net random radiobuttonlist

我试图以随机顺序将数据添加到RadioButtonList(如下面btnGetQuestion_Click中所示),但是,在回发(btnCheck_Click)上,RadioButtonList中的所选项目将更改为列表中的其他项目。为什么会发生这种情况以及有关如何避免这种情况的任何建议?

的.aspx:

<form id="form1" runat="server">
<div>
    <asp:Button ID="btnGetQuestion" runat="server" Text="Get Question" OnClick="btnGetQuestion_Click" />
    <asp:Label ID="lblQuestion" runat="server" Text=""></asp:Label>
    <asp:RadioButtonList ID="rblQuestions" runat="server"></asp:RadioButtonList>
    <asp:Button ID="btnCheck" runat="server" Text="Check Answer" OnClick="btnCheck_Click" />
    <asp:Label ID="lblAnswer" runat="server" Text=""></asp:Label>
    <asp:Label ID="lblError" runat="server" Text=""></asp:Label>
</div>
</form>

C#:

protected void btnGetQuestion_Click(object sender, EventArgs e)
{
    Random ran = new Random();
    var numbers = Enumerable.Range(1, 5).OrderBy(i => ran.Next()).ToList();

    List<ListItem> ans = new List<ListItem>();
    ans.Add(new ListItem("option 1", "y"));
    ans.Add(new ListItem("option 2", "n"));
    ans.Add(new ListItem("option 3", "n"));
    ans.Add(new ListItem("option 4", "n"));
    ans.Add(new ListItem("option 5", "n"));

    foreach (int num in numbers)
    {
        rblQuestions.Items.Add(ans[num - 1]);
    }
}

protected void btnCheck_Click(object sender, EventArgs e)
{
}

1 个答案:

答案 0 :(得分:1)

在将列表项添加到列表的代码中,您将添加具有相同值“n”的多个列表项。如果您选择其中一个值为'n'的项目,则在回发之后将选择一个值为'n'的项目(可能是第一个)。如果需要保持正确的选择,则需要为每个复选框绑定不同的值。 我认为您必须将选项和值对保留在单独的视图状态变量中,将选项1绑定,选项2 ...作为单选按钮列表的值,并在进一步处理期间从viewstate变量中获取正确的值。

ans.Add(new ListItem("option 1", "y"));
ans.Add(new ListItem("option 2", "n"));
ans.Add(new ListItem("option 3", "n"));
ans.Add(new ListItem("option 4", "n"));
ans.Add(new ListItem("option 5", "n"));