【发布时间】:2010-12-16 21:49:22
【问题描述】:
好的,所以我有一个 ASP.NET 应用程序,我正在努力减少页面的开销(我们的用户拥有平均 10 年使用的 PC)。
其中一种方法是将 ViewState 移动到服务器端。我们有足够的内存。
我在这里遵循最常被引用的模式:http://authors.aspalliance.com/robertb/articles.aspx?articleId=2
因为是 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.
我还注意到现在每个页面上都有两个隐藏的“__VIEWSTATE”字段,其中一个为空,其中一个具有我班级的数值。我认为这与问题有关——也许 AJAX 更新正在尝试从空的而不是具有值的读取?
有谁知道为什么会出现这个错误?
【问题讨论】:
-
您想从 HTML 页面中删除一些简单的文本值,因为您的用户拥有如此古老的计算机……但您正在使用 AJAX 更新???
-
@Andrew:AJAX 纯粹是良好的性能。 (正确使用时)
-
@SLaks - 在相对现代的系统上,不会阻塞在 HTML 中额外的几千字节纯文本,当然。但是在具有十年历史的系统上,显然内存太少了,它们无法处理页面上几 K 额外的隐藏数据?在我看来,这里更好的优化技术是将 ViewState limit 限制在真正需要的范围内,并停止要求浏览器做更多的“提升”,当它被认为是一个年长的弱者时默认。
-
@Andrew:选择要么刷新整个页面,要么使用 AJAX 仅刷新其中的一小部分。我选择只刷新一小部分。所以是的,AJAX 是一种性能提升。
-
@msigman - 你最终会失去很多开发人员的性能,因为你真正应该在这里做的是限制视图状态......而不是消除它......或者只是使用一个框架'首先不要从 ViewState 开始,比如 ASP.NET MVC(如果你已经有一个工作的应用程序,可能不是一个选项)
标签: asp.net