ASP.NET Masterpages和viewstate

时间:2008-10-14 14:31:31

标签: asp.net master-pages viewstate

我希望改善我网站的性能,不是因为它的表现很差,而是一般的练习。 asp.net网站的通常建议是尽可能删除viewstate。我相信这可以通过单独的页面上的每个控件或整个页面来完成。

我的问题是,如果我禁用页面viewstate将停止母版页上的控件的视图状态(据我所知,母版页实际上是页面上的控件)。

4 个答案:

答案 0 :(得分: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>

现在运行您的页面时,您会发现您的视图状态大小已降至几个字节。 SessionPageStateAdapter类在将视图状态提供给浏览器之前拦截它,并将其保存在处于会话状态的服务器上。仍然被发送到客户端的视图状态只是一个标识符,用于在页面回发到服务器时重新构建原始视图状态。

答案 1 :(得分:1)

您可能会发现这篇文章很有帮助:
http://msdn.microsoft.com/en-us/library/ms972976.aspx

答案 2 :(得分:1)

是的,该页面是页面流的创建者。因此,禁用页面的视图状态会使视图状态呈现出OnInit进程。一个更好的问题是为什么禁用母版页的视图状态也会这样做?

答案 3 :(得分:1)

在优化网站之前,只需快速注意一下,您是否通过确保在发送之前对所有文件进行了压缩来优化服务器。

如果不是这样,在你开始修改页面之前,这会给你一个很好的提升。

http://www.codinghorror.com/blog/archives/000059.html