我正在尝试使用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
}
有什么理由
答案 0 :(得分:0)
不确定是什么问题,但我建议将两个TreeView添加到ContentTemplate,然后使用Visible属性隐藏/显示它们。这也消除了你对Session的依赖。我发现手动添加和删除控件变得混乱,特别是在处理ViewState时。