2008-10-14 79 views
3

我期望改善我的網站的性能,不是因爲它表現糟糕,而僅僅是作爲一般練習。通常對asp.net網站的建議是儘可能移除viewstate。我相信這可以通過頁面上的每個控件單獨或整個頁面來完成。ASP.NET主頁和視圖狀態

我的問題是,如果我禁用頁面viewstate將停止在母版頁上的控件的視圖狀態(據我所知,母版實際上是頁面上的控件)。

+0

「不成熟的優化是萬惡的根源」 – stephenbayer 2008-10-14 14:38:14

回答

1

是,頁面的頁面流的鼻祖。因此,禁用頁面的視圖狀態會將視圖狀態渲染爲OnInit進程。更好的問題是爲什麼禁用母版頁的視圖狀態的做法是一樣的?

3

這裏有一個簡單的方法來縮小所有的視圖狀態。

步驟1.創建一個新的類,它看起來像這樣:

Imports System 
Imports System.Web.UI 

Public Class SessionPageStateAdapter 
    Inherits System.Web.UI.Adapters.PageAdapter 

    Public Overrides Function GetStatePersister() As System.Web.UI.PageStatePersister 

     Return New SessionPageStatePersister(Page) 

    End Function 
End Class 

第2步:添加App_Browsers文件夾到您的項目。

第3步。在新的App_Browsers文件夾中,添加一個看起來像這樣的新文件default.browser
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page" adapterType="[YourNamespaceGoesHere].SessionPageStateAdapter" />
</controlAdapters>
</browser>
</browsers>

當你現在運行你的頁面時,你會發現你的viewstate大小已經下降到幾個字節。 SessionPageStateAdapter類在將視圖狀態提供給瀏覽器並在Session狀態下將其保存在服務器上之前攔截它。仍然發送給客戶端的視圖狀態位僅僅是一個標識符,用於在頁面被髮送回服務器時重新構建原始視圖狀態。