使用数据源asp.net

时间:2017-02-10 19:33:54

标签: c# asp.net

我有一个asp转发器内的单选按钮列表。它看起来像这样:

<asp:Repeater runat="server" ID="surveyRepeater">
    <ItemTemplate>
        <h3><%#((Half_Blue.Survey_files.survey_classes.surveyQuestion)Container.DataItem).questionNum%>
                . <%#((Half_Blue.Survey_files.survey_classes.surveyQuestion)Container.DataItem).question%>
        </h3>
        <asp:RadioButtonList ID="surveyRadioList"
            DataTextField="questionText"
            DataValueField="valueOfQuestion" runat="server"
            DataSource="<%#((Half_Blue.Survey_files.survey_classes.surveyQuestion)Container.DataItem).answerOptions %>"
            RepeatDirection="Vertical">
        </asp:RadioButtonList>
    </ItemTemplate>
</asp:Repeater>

这会正确显示单选按钮列表,但我无法弄清楚如何在后面的代码中获取响应。

我可以通过以下方式获取单选按钮列表:

foreach (RepeaterItem item in surveyRepeater.Items)
{
    // Checking the item is a data item
    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
    {
        var rdbList = item.FindControl("surveyRadioList") as RadioButtonList;
        if (rdbList != null)
        {
            retList.Add(rdbList.SelectedValue);
        }
    }
}

然而,即使它找到了所有8个单选按钮列表,所选的值也总是一个空的“”字符串。无论我选择哪个选项,所选索引总是-1。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为你在每个PostBack上重新绑定Repeater。您需要将其包含在IsPostBack支票内。

if (!Page.IsPostBack)
{
    surveyRepeater.DataSource = Common.LoadFromDB();
    surveyRepeater.DataBind();
}

如果不重新创建RadioButtonLists并且他们的选择丢失了。