代码之家  ›  专栏  ›  技术社区  ›  Lars Holdgaard

UPdatePanel中的计时器更改RadioButtonList的索引

  •  2
  • Lars Holdgaard  · 技术社区  · 14 年前

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

    我有一个定时器,它每秒钟运行一次,用来更新大量的图形控件。除了RadioButtonList选择之外,一切都正常。

    这就是发生的事 :

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

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

    首先,我不知道计时器为什么要重新选择我的RadioButtonList选项,因为任何其他页面加载事件都不起作用。即使这有道理,我也不知道为什么它会重新选择一些答案。。

    我有以下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 回复  |  直到 14 年前
        1
  •  0
  •   Tim Schmelter    14 年前

    我不确定是否有其他可能的原因,但您不应该在加载页面中绑定RadioButtonList postbacks . 否则选择就会丢失。

    if (!IsPostBack) {
       SetupPage();
    }
    

    只有当页面第一次加载时以及当您更改其数据源时(更新问题的事件处理程序中的f.e),才能执行此操作。

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