我在嘗試清理一個ViewState處處啓用的ASP.NET WebForms站點。這是一個性能問題 - 巨大的視圖狀態導致明顯的提交延遲。但大多數表單並不需要ViewState,除了一些複雜的控件&表單數據。即使是沒有輸入控件的表單,也會產生很大的視圖狀態,因爲我猜asp.net正在存儲關於每一個服務器控件的各種元數據。但能見度狀態等都是在代碼中控制的,所以我認爲我可以消除很多。在asp.net 4.0中儘量減少ViewState-被EnableViewState和ViewStateMode困惑
將EnableViewState="false"
添加到每一個不需要它的控件(在一個頁面中,並在代碼中創建)是非常繁重的,所以我試圖在頁面/控件級別禁用它,並選擇性地啓用它需要它的東西。 (是的,我意識到這是有風險的,但實際上只有幾個大表單和一對模板,如果解決的話會產生很大的差異)。
這是我沒有得到的。
如果一個控件或頁面有EnableViewState="false"
它的<%.. %>
描述符,或者在它的標籤中它在父頁面中創建的地方,所有事情都會中斷,因爲在代碼中添加的任何ViewState數據都不起作用。所以我似乎可以在控制級別保持啓用狀態,但在每個容器中將EnableViewState
設置爲false,然後在每個控件級別設置ViewStateMode=true
(哪個是ovvrides)。
什麼我沒有變是發生了什麼時:
ViewStateMode = ViewStateMode.Enabled
和 EnableViewState = false
爲包含其他控件的控制。
用於控制。內部控件是否仍然可以使用ViewStateMode
?基本上,當它們發生衝突時,哪個設置有最後一個詞?
對於每個容器,我希望能夠在一個包裝控制禁用一切,但仍然保證:
1)代碼工作 ViewState的設置,
2)的ViewState被禁用默認爲所有控件和
3)我可以有選擇地啓用ViewState的子控件。
這似乎是混淆。如果在母版頁中有一個包裝控件設置爲EnableViewState="false"
,但是將子控件設置爲ViewStateMode="Enabled"
,它會中斷。根據MS,ViewStateMode應該取代任何外部ViewState設置,但它似乎不工作。
如果您提供一個關鍵信息,此問題非常容易回答:哪個版本的ASP.NET? – 2011-03-30 12:13:08
對不起! Asp.net 4.0。 – 2011-03-30 12:30:03