Ajax使viewstate无效

时间:2013-06-06 18:33:13

标签: jquery asp.net vb.net viewstate

  

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

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

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

  1. 删除带有Ajax的runat=server控件是否会导致此问题。
  2. 如果我使用runat=server控件生成的HTML填充DIV,则触发此操作。
  3. 有没有办法在将runat=server控件作为ajax ctl的一部分返回之前对其进行自由切换。
  4. (例如 - 转发器非常适合构建表。我可以使用转发器,然后在将响应发送到客户端之前从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"
    

    谢谢, 格雷格。

1 个答案:

答案 0 :(得分:1)

好吧,我让它工作了,但我还是放弃了.NET菜单。 由于我正在寻找一些高水平的信息,我会让社区知道我能做的事情......

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

有问题的AJAX页面基本上是3个div。 Div_A是由文档列表组成的导航元素。 Div_B是具有一些操作按钮的1个文档的只读细节。 Div_C是一种输入形式。 div由jquery ajax调用填充。成功之后,我将替换有问题的DIV的整个innerHTML。 Div_A& Div_B会按此顺序在页面加载时自动填充。 (列表和第一份文件详情)

打破局面,只是填充Div_A导致问题。 检查显示我有一些DIV与RUNAT = SERVER。我删除了。这并没有解决问题。 整个内容周围还有一张FORM。表单标记为runat = server。 我完全删除了FORM。这允许我使用没有viewstate错误的菜单。但是,如果我单击第二个文档,导致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

感谢您的建议。

格雷格