【问题标题】:Ajax invalidating viewstateAjax 使视图状态无效
【发布时间】:2013-06-06 18:33:12
【问题描述】:

此页面的状态信息无效,可能已损坏

这似乎是一个很常见的问题。但是我还没有找到解决基本问题的帖子。

我有一个严重 ajaxed 的应用程序,我遇到了这个问题。 简而言之,ASPX 页面并不比一系列通过 AJAX 调用填充 HTML 的 div 多。 如果有人对这些基本问题有 cmet,我将不胜感激。我将开始一个示例应用程序,看看我是否也能回答它们。

  1. 使用 Ajax 删除 runat=server 控件是否会导致此问题。
  2. 如果我使用由runat=server 控件生成的 HTML 填充 DIV,会触发此操作。
  3. 有没有办法在将 runat=server 控件作为 ajax ctl 的一部分返回之前对其进行脑叶切除。

( 例如 - 转发器非常适合构建表格。我可以使用转发器,然后在将响应发送到客户端之前从 HTML 中删除一些语法吗? 如果必须的话,我可以循环播放.. )

4) 有什么我可以放在标题中的东西来让这整个事情消失吗?

Page Language="vb" 
AutoEventWireup="false" 
CodeBehind="frustration.aspx.vb"                       
_Inherits="Portal.frustration"
EnableViewState="false"   
enableViewStateMAC="false"  
EnableEventValidation="false" 
ValidateRequest="false"
ViewStateEncryptionMode="Never" 
MasterPageFile="~/_MasterPages/Admin.Master"

谢谢, 格雷格。

【问题讨论】:

  • 如果你要使用 ajax,就使用 ajax。在不知道自己在做什么的情况下将其与回发混为一谈,结果会很糟糕。
  • 我不确定你是如何使用 ajax 来填充你的 html 的。但只需确保 ajax 响应中的 HTML 中没有 viewstate 字段。并且还要确保当前页面的视图状态没有被 ajax 响应覆盖/修改。当您将另一个页面的 html 完全转储到您当前的 [age 中时,通常会发生这种情况
  • 您需要找到您更改的内容并破坏了页面,或者您没有与页面一起发送的内容。您可以开始禁用大多数控件上的某些视图状态,并尝试定位您中断的内容。

标签: jquery asp.net vb.net viewstate


【解决方案1】:

好吧,我让它工作了,但我还是放弃了 .NET 菜单。 由于我一直在寻找一些高级别的信息,所以我会让社区做我能做的......

当我加载 AJAX 页面然后使用菜单导航时会发生视图状态问题。发生这种情况是因为在导航离开之前单击菜单会返回到我的 AJAX 页面。如果它只是一个超链接,就没有问题。

有问题的 AJAX 页面本质上是 3 个 div。 Div_A 是一个由文档列表组成的导航元素。 Div_B 是带有一些操作按钮的 1 个文档的只读详细信息。 Div_C 是一种输入形式。 div 由 jQUery ajax 调用填充。成功后,我替换了相关 DIV 的整个 innerHTML。 Div_A 和 Div_B 在页面加载时按该顺序自动填充。 (列表和第一个文件详细信息)

打破一切,只是填充 Div_A 导致了问题。 检查显示我有一些带有 RUNAT=SERVER 的 DIV。我删除了那个。这并没有解决问题。 整个内容周围还有一个表格。该表单被标记为 runat=server。 我完全删除了表格。这使我可以使用菜单而不会出现视图状态错误。但是,如果我单击第二个文档,导致 Div_B 重新加载。问题再次出现。

Div_B 的所有内容都具有相同的 FORM。 (这些必须由 Visual Studio 自动放置。没有理由使用任何一种形式,因为 DIV_A 和 DIV_B 都是只读的) 关于 DIV_B 的有趣之处在于,我需要具有 RUNAT=SERVER 的 DIV,因为我在后面的代码中设置了 innerText。 删除 FORM 允许我在文档之间导航,并且仍然能够使用菜单而不会出现 VIEWSTATE 错误。

所以: 将 RUNAT=SERVER HTML 元素添加到页面似乎不会破坏 VIEWSTATE 将 RUNAT=SERVER FORM 添加到页面似乎会破坏 VIEWSTATE。

所以一切都恢复正常了,但为什么突然出现这个问题?不确定。发生了很大变化,我无法指出任何一件事。 (也许当我从 vs10->vs12 升级时,表格会自动生成)。谁知道,谁在乎……

最终 - 我不能仅仅为了 .NET 菜单项而继续溺爱这个问题。就@Brad M 而言,我决定只使用一个jQuery 菜单,这将消除任何对该页面的批发页面回发。

稍作搜索,我发现了 arnab_bandyopadhyays 的水平 jQuery 菜单实现,他在这里演示:http://jsfiddle.net/yRJ9g/。

<<stackoverflow wants some code if i reference jsfiddle, so here ya go...>>
dim viewStateWorksWellWAjax as boolean =false

感谢您的建议。

格雷格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多