Asp.net 将ViewState移动到服务器端
好的,我有一个ASP.NET应用程序,我正在努力减少页面的开销(我们的用户的电脑平均使用年限为10年) 其中一种方法是将ViewState移动到服务器端。我们有很多羊 在这里,我遵循了最常被引用的模式: 因为它是7年前编写的,所以我必须更新一些过时的函数,即RegisterHiddenField到ScriptManager.RegisterHiddenField,ConfigurationSettings.AppSettings到ConfigurationManager.AppSettings 这似乎工作得相当好,但是,一旦我执行AJAX回发,就会出现错误Asp.net 将ViewState移动到服务器端,asp.net,Asp.net,好的,我有一个ASP.NET应用程序,我正在努力减少页面的开销(我们的用户的电脑平均使用年限为10年) 其中一种方法是将ViewState移动到服务器端。我们有很多羊 在这里,我遵循了最常被引用的模式: 因为它是7年前编写的,所以我必须更新一些过时的函数,即RegisterHiddenField到ScriptManager.RegisterHiddenField,ConfigurationSettings.AppSettings到ConfigurationManager.AppSettings
Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerServerErrorException: The state information is invalid for this page and might be corrupted.
我还注意到,现在每个页面上都有两个隐藏的“uu VIEWSTATE”字段,其中一个是空的,另一个是我的类中的数值。我认为这与问题有关——也许AJAX更新试图从空的文件而不是有值的文件中读取
有人知道为什么会发生此错误吗?答案是根本不使用提供的示例。它已经过时了,现在框架本身提供了一个更好的解决方案
protected override PageStatePersister PageStatePersister
{
get { return new SessionPageStatePersister(this); }
}
我刚刚将这4行代码添加到我的BasePage类中,瞧,页面大小立即减少了30%,而且在AJAX更新中效果很好。答案是根本不使用提供的示例。它已经过时了,现在框架本身提供了一个更好的解决方案
protected override PageStatePersister PageStatePersister
{
get { return new SessionPageStatePersister(this); }
}
我刚刚将这4行代码添加到我的BasePage类中,瞧,页面大小立即减少了30%,并且与AJAX更新配合得很好。之所以发生这种情况,是因为您没有做任何事情来告诉MS AJAX框架您的新服务器端ViewState机制;它获取新的值,这些值是简单地修剪下来的键,这些键指向在会话对象中找到它的位置。AJAX框架对此一无所知
在根本不需要的控件上禁用ViewState最容易减少ViewState。如果您使用的是ASP.NET 4.0,您可以做得更好—默认情况下在整个页面上禁用它,然后只在需要的地方启用它。之所以会出现这种情况,是因为您没有做任何事情来告诉MS AJAX框架您新的服务器端ViewState机制;它获取新的值,这些值是简单地修剪下来的键,这些键指向在会话对象中找到它的位置。AJAX框架对此一无所知 在根本不需要的控件上禁用ViewState最容易减少ViewState。如果您使用的是ASP.NET 4.0,您可以做得更好—默认情况下在整个页面上禁用它,然后只在需要的地方启用它。阅读以下内容: 并使用Http压缩。阅读以下内容:
并使用Http压缩。您希望从HTML页面中删除一些简单的文本值,因为您的用户拥有如此古老的计算机。。。但是你使用的是AJAX更新???@Andrew:AJAX对性能完全有好处。(正确使用时)@SLaks-在相对现代的系统上,当然不会被HTML中额外的几千字节纯文本阻塞。但在已有十年历史的系统上,显然内存太少,无法处理页面上的几K额外隐藏数据??在我看来,一种更好的优化技术是将ViewState限制在真正需要的范围内,当默认情况下它被认为是一个年老的弱者时,停止要求浏览器做更多的“提升”。@Andrew:选择是刷新整个页面,或者使用AJAX只刷新其中的一小部分。我选择只刷新一小部分。是的,AJAX是一种性能提升。@msigman-您最终将失去很多开发人员的性能,因为您真正应该做的是限制viewstate。。。没有消除它。。或者只是使用一个不以ViewState开头的框架,比如ASP.NETMVC(如果你已经有了一个可用的应用程序,那么它可能不是一个选项),你想从HTML页面中删除一些简单的文本值,因为你的用户拥有如此古老的计算机。。。但是你使用的是AJAX更新???@Andrew:AJAX对性能完全有好处。(正确使用时)@SLaks-在相对现代的系统上,当然不会被HTML中额外的几千字节纯文本阻塞。但在已有十年历史的系统上,显然内存太少,无法处理页面上的几K额外隐藏数据??在我看来,一种更好的优化技术是将ViewState限制在真正需要的范围内,当默认情况下它被认为是一个年老的弱者时,停止要求浏览器做更多的“提升”。@Andrew:选择是刷新整个页面,或者使用AJAX只刷新其中的一小部分。我选择只刷新一小部分。是的,AJAX是一种性能提升。@msigman-您最终将失去很多开发人员的性能,因为您真正应该做的是限制viewstate。。。没有消除它。。或者只是使用一个不以ViewState开头的框架,比如ASP.NETMVC(如果你已经有了一个可用的应用程序,那么它可能不是一个选项),我知道你会找到一种不需要删除ViewState的方法:)这大大减少了我的页面大小。而且页面加载速度更快/响应速度更快我知道你会找到一种不需要删除ViewState的方法:)这大大减少了我的页面大小。而且页面的加载速度对我来说要快得多/更具响应性嗯,这很有意义。然而,我最终放弃了整个方案,转而使用内置的.NET SessionPageStatePersister类。无论ViewState存储在哪里,您都应该尽量减少它。嗯,这是有道理的。然而,我最终放弃了整个方案,转而使用内置的.NET SessionPageStatePersister类。您应该始终尝试减少ViewState,无论它位于何处