2009-11-04 31 views
0

我有很多在ASP.NET頁面中動態創建的Web控件。在某些回發場景中(當我單擊一個LinkBut​​ton時),我想跳過加載舊的Web控件樹並立即生成新樹。不幸的是,當我生成新樹時,舊樹的視圖狀態被加載到它。爲子控件禁用視圖狀態加載

我想能夠禁用此特定場景的視圖狀態加載過程,但在加載新樹後,視圖狀態應該正常工作。

我已經解決了部分問題,通過重寫Web控件的LoadViewState方法,但不幸的是,這會禁用特定於控件的視圖狀態,而不是他的孩子(文本框,按鈕等)。

可能嗎?

謝謝。

回答

0

您可以嘗試在viewstate加載後創建新樹,例如,在Page_Load中。

+0

是的,我實際加載在其自帶的Page_Load後LinkBut​​ton.Clicked事件的新的控制,但一路ASP.NET工作時,視圖狀態會加載直到你實際加載新的控件到一個有根的控件(一直有父母一直到頁面)爲止。 –

+0

啊,動態添加控件。這總是這麼混亂.. :)我不知道你的代碼是如何構造的,但也許你可以掛鉤到你的動態控件加載事件,並在該處理程序中創建新的樹? –

+0

不確定你的意思是「鉤入動態控件加載事件並在該處理程序中創建新樹」。 –

0

您可以通過在將新數據綁定到它之前清除樹的內容來以編程方式執行此操作。它應沿着

tree.nodes.clear() 

線是服用點,然後你只是去彷彿樹是空的,由任何邊界,或通過與

tree.Nodes.Add(New TreeNode("name of node")) 

現在編程方式添加節點添加你的數據對於我正在使用的常規控件,如果您不使用viewstate,則會遇到大量問題。您可以使用controlname.controls.clear以類似的方式從控制樹中刪除它們。現在你主要問題是這些控制的附加問題還是你不想承擔視圖狀態的負擔?我建議,如果是後者,你以編程方式清除你的控件並將viewstate服務器端存儲在某個地方,以便它可以從內存中加載而不是使用你的帶寬。

至於控件的動態加載,您需要確保新的控件帶有不同的ID。我在我的一個應用程序中所做的實際上是保留舊的控件,使它們不可見並清除視圖狀態,然後在下一次調用時將其從樹中移除。

+0

我不是真的在用樹。當我說的「樹」是指動態添加的控件樹時。我試圖避免的問題是在LinkBut​​ton.Click上生成非常耗時的控件列表,只是爲了讓asp.net開心並加載視圖狀態,然後忘記它們並使用新的控件組重新創建。我試圖避免第一步。通常我不會去這個長度去修改asp.net創建動態控件的正常行爲,但正如我所說的,這個操作在這種情況下非常耗時,我想完全避免它。 –

相關問題