System.Web.UI.Controls.ControlCollection.Add抛出ArgumentOutOfRangeException

时间:2010-06-30 15:53:57

标签: c# asp.net

我正在尝试使用asp:Panel和asp:TreeView创建一个标签式用户界面。我保持两个TreeViews在后台初始化,当我需要显示一个时,我清除面板,然后添加适当的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 个答案:

答案 0 :(得分:0)

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