Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将ViewState移动到服务器端_Asp.net - Fatal编程技术网

Asp.net 将ViewState移动到服务器端

Asp.net 将ViewState移动到服务器端,asp.net,Asp.net,好的,我有一个ASP.NET应用程序,我正在努力减少页面的开销(我们的用户的电脑平均使用年限为10年) 其中一种方法是将ViewState移动到服务器端。我们有很多羊 在这里,我遵循了最常被引用的模式: 因为它是7年前编写的,所以我必须更新一些过时的函数,即RegisterHiddenField到ScriptManager.RegisterHiddenField,ConfigurationSettings.AppSettings到ConfigurationManager.AppSettings

好的,我有一个ASP.NET应用程序,我正在努力减少页面的开销(我们的用户的电脑平均使用年限为10年)

其中一种方法是将ViewState移动到服务器端。我们有很多羊

在这里,我遵循了最常被引用的模式:

因为它是7年前编写的,所以我必须更新一些过时的函数,即RegisterHiddenField到ScriptManager.RegisterHiddenField,ConfigurationSettings.AppSettings到ConfigurationManager.AppSettings

这似乎工作得相当好,但是,一旦我执行AJAX回发,就会出现错误

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,无论它位于何处