2012-05-02 31 views

回答

16

當頁面中的ViewState變得非常大時,可能會出現問題,因爲某些防火牆和代理會阻止訪問包含巨大ViewState大小的頁面。爲此,ASP.NET引入了ViewState分塊機制。因此,ASP.NET使用web.config部分中的MaxPageStateFieldLength屬性將ViewState的單個隱藏字段拆分爲幾個。

當MaxPageStateFieldLength屬性被設置爲正數,發送到客戶端瀏覽器的視圖狀態被分成多個隱藏字段。

設置MaxPageStateFieldLength屬性爲負數(默認值)指示的視圖狀態字段不應被分離成塊。將MaxPageStateFieldLength設置爲較小的數字可能會導致較差的性能。

樣品的ViewState前:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"value="/wEPDwUKLTk2Njk3OTQxNg9kFgICAw9kFgICCQ88KwANAGQYAQUJR3Jp 
ZFZpZXcxD2dk4sjERFfnDXV/hMFGAL10HQUnZbk=" /> 

在web.config中然後設置:

<pages maxPageStateFieldLength="40"> 

樣品的ViewState後:

<input type="hidden" name="__VIEWSTATEFIELDCOUNT" id="__VIEWSTATEFIELDCOUNT"value="3" /> 
<input type="hidden" name="__VIEWSTATE" 
id="__VIEWSTATE" value="/wEPDwUKLTk2Njk3OTQxNg9kFgICAw9kFgICCQ88" /> 
<input type="hidden" name="__VIEWSTATE1" 
id="__VIEWSTATE1" value="KwANAGQYAQUJR3JpZFZpZXcxD2dk4sjERFfnDXV/" /> 
<input type="hidden" name="__VIEWSTATE2" 
id="__VIEWSTATE2" value="hMFGAL10HQUnZbk=" /> 

希望能幫助你!

+1

很好的解釋,謝謝 – Sujit

+1

的EVENTVALIDATION隱藏字段也會變大。這也可能是塊? –

+0

請注意元素坐落在web.config中元素中。 – woohoo

4

What's New in ASP.NET State Management - MSDN

如果視圖狀態的數據量變得太大,視圖狀態 組塊將自動分割數據成塊,並把 數據劃分爲多個隱藏的表單字段。

爲什麼我們需要ViewState分塊?

這裏是ViewState Overivew - MSDN

的exerpt另一個重要的考慮是,如果數據在 隱藏字段量變大,有些代理服務器和防火牆會阻止 訪問包含它們的頁面。因爲最大量可以 與不同防火牆和代理的實現而改變,大隱 字段可引起零星問題。爲幫助避免此問題,如果存儲在ViewState屬性中的數據量超過MaxPageStateFieldLength屬性中指定的值 ,則頁面 會將視圖狀態拆分爲多個隱藏字段,以將大小減小到 以下的每個單獨字段的大小防火牆拒絕。

+0

@Downvoter關心評論? – Habib