2010-06-30 37 views
1

我想使用asp:Panel和asp:TreeView製作選項卡式用戶界面。我保持兩個TreeViews在後臺初始化,當我需要顯示一個,我清除面板,然後添加適當的TreeView。System.Web.UI.Controls.ControlCollection.Add引發ArgumentOutOfRangeException

我保持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

當使用而不是div時,你會得到同樣的錯誤嗎? – 2010-06-30 16:00:25

+0

它做同樣的事情。但它似乎只在我改變控制時崩潰。所以在初始化時,我在頁面加載期間添加了第一個TreeView。我按下按鈕後,我正在更換控件,並且崩潰。如果我按下當前加載的按鈕,它不會崩潰。 – 2010-06-30 16:37:28

回答

0

不知道是什麼問題,但我會建議增加兩個的TreeView到的ContentTemplate,然後隱藏/顯示與Visible屬性他們。這也擺脫了對Session的依賴。我發現手動添加和刪除控件會變得麻煩,特別是在處理ViewState時。

相關問題