UPdatePanel中的计时器更改RadioButtonList的selectedIndex

时间:2010-11-16 17:40:01

标签: asp.net asp.net-ajax updatepanel radiobuttonlist

我的情况是我在ASP.NET中有一个页面。在这个页面中,我有一个RadioButtonList,它包含一个问题的5个解决方案。 RadioButtonList由一个具有这些解决方案的对象提供。

我有一个计时器,每秒运行一次,以更新大量的图形控件。一切正常,请选择RadioButtonList。

这就是发生的事情

当我在RadioButtonList中选择一个项目并且计时器勾选时,RadioButtonLIst值的selectedIndex为0.

这意味着它选择列表中的第一项。但是,如果我点击一个项目,其中包含“是”值(值字段可以为“否”或“是”,则它将保留在此项目中。

首先,我不知道为什么计时器重新选择我的RadioButtonList选择,因为任何其他Page_Load事件什么都不做。即使这是有道理的,我也不知道为什么它只是重新选择了一些答案..

我有以下HTML代码:

<asp:Timer ID="AssignmentTimer" runat="server" Interval="1000">
</asp:Timer>


<asp:UpdatePanel ID="FightUpdatePnl" runat="server" UpdateMode="Always" ChildrenAsTriggers="True">
   <Triggers>
      <asp:AsyncPostBackTrigger ControlID="AssignmentTimer" EventName="Tick"/>
   </Triggers>

   <ContentTemplate>
      <asp:Panel ID="AssignmentDiv" runat="server" CssClass="FightDiv">
      </asp:Panel>
   </ContentTemplate>
</asp:UpdatePanel>

我有以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    SetupPage();
}

private void SetupPage()
{
   RadioButtonList list = new RadioButtonList();

   list.DataSource = question.PossibleSolution;
   list.DataTextField = "Content";
   list.DataValueField = "IsAnswer";
   list.DataBind();

   AssignmentDiv.Controls.Add(list);
}

总而言之,我的问题是......

当计时器滴答时,RadioButtonList重新选择项目0.然而,这不一致,有时它不会重新选择。 我宁愿它根本没有重新选择! :)

1 个答案:

答案 0 :(得分:0)

我不确定是否没有其他可能的原因,但是你不应该在postbacks的Page_Load中绑定你的RadioButtonList。 否则选择会丢失。

if (!IsPostBack) {
   SetupPage();
}

仅在首次加载页面和更改其数据源时(f.e在事件处理程序中更新问题时)执行此操作。

  • 您正在将RadioButtonList动态添加到页面中。好的,这必须在每次回发时完成(如果可能的话,在Page_Init中)。但它不需要在每个Postback上反弹到数据源,因为Viewstate会将选择保存在Postbacks上。因此,拆分(重新)创建并从RadioButtonList.DataBind添加RadioButtonList。第一个必须在每个回发时完成,第二个必须在第一次加载时和源更改时(例如在事件处理程序中)完成。
  • 设置RadiobuttonList的ID。否则,在回发后不会加载ViewState。 ID应该是唯一的。如果要添加多个RadioButtonList,请使用计数器或类似的东西。