代码之家  ›  专栏  ›  技术社区  ›  Jonathan Sternberg

system.web.ui.controls.controlCollection.add throws ArgumentOutOfRangeException

  •  1
  • Jonathan Sternberg  · 技术社区  · 14 年前

    我正在尝试使用asp:panel和asp:treeview创建选项卡式用户界面。我保持两个树视图在后台初始化,当我需要显示一个树视图时,我清除面板,然后添加适当的树视图。

    我将treeview保存在session变量中,这样当页面由于回发而重新加载时,它们就不会消失。

    但是当我试图添加控件时,我得到了一个argumentoutofrangeexception。下面是一小段重要的代码:

    <asp:UpdatePanel UpdateMode="Conditional" runat="server">
      <ContentTemplate>
        <asp:LinkButton ID="ContentButton" OnClick="ContentButton_Click" Text="Contents" runat="server" />
      </ContentTemplate>
    </asp:UpdatePanel>
    
    <asp:UpdatePanel UpdateMode="Conditional" runat="server">
      <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ContentButton" />
      </Triggers>
      <ContentTemplate>
        <div id="TOCPanel" runat="server" />
      </ContentTemplate>
    </asp:UpdatePanel>
    

    这是C文件中的相关代码。

    protected void IndexButton_Click( object sender, EventArgs e )
    {
        TOCPanel.Controls.Clear();
        // _TreeView points to a property that retrieves the TreeView from Session["TreeView"]
        TOCPanel.Controls.Add( _TreeView ); // This line fails
        // TOCPanel.Controls.Add( new TreeView() ); // This fails with the same error message too
    }
    

    有什么理由吗

    1 回复  |  直到 14 年前
        1
  •  0
  •   Mike Comstock    14 年前

    不确定问题是什么,但我建议将这两个TreeView添加到ContentTemplate,然后使用Visible属性隐藏/显示它们。这也消除了您对会话的依赖。我发现手动添加和删除控件会变得混乱,特别是在处理视图状态时。