我希望提高网站的性能,不是因为它表现得很差,而是作为一种通常的练习。针对asp.net网站的常规建议是尽可能删除视图状态(ViewState)。我相信这可以通过单独为页面上的每个控件或整个页面来完成。
我的问题是,如果我禁用页面视图状态,这是否会停止主页面上控件的视图状态(据我所知,主页面实际上是页面上的一个控件)。
我希望提高网站的性能,不是因为它表现得很差,而是作为一种通常的练习。针对asp.net网站的常规建议是尽可能删除视图状态(ViewState)。我相信这可以通过单独为页面上的每个控件或整个页面来完成。
我的问题是,如果我禁用页面视图状态,这是否会停止主页面上控件的视图状态(据我所知,主页面实际上是页面上的一个控件)。
有一种简单的方法可以缩小所有视图状态。
步骤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>
现在运行页面时,您应该发现视图状态大小已经降低到几个字节。 SessionPageStateAdapter类在视图状态被发送到浏览器之前截获它并将其保存在服务器上的会话状态中。仍然发送到客户端的视图状态只是一个标识符,用于在页面提交回服务器时重新构建原始视图状态。
是的,页面是页面流程的发起者。因此,禁用页面的视图状态会将视图状态呈现从OnInit过程中删除。更好的问题是为什么禁用主页面的视图状态也会做同样的事情?