【问题标题】:"The state information is invalid for this page and might be corrupted"“此页面的状态信息无效,可能已损坏”
【发布时间】:2012-08-02 18:36:18
【问题描述】:

我的 asp.net 应用程序有一个母版页、一个内容页和一个用户控件。

在主母版页中,有一个链接将fancybox 显示为iframe。 iframe 有一个表单来登录页面。 iframe 是一个新的母版页,其中包含登录的内容页面,该页面具有登录的用户控制权。

当用户单击按钮登录时,服务器端会检查凭据是否正常,否则会显示一条消息。所有这些都使用自定义验证器。

我的问题是,当用户第一次单击按钮登录时,它会检查正常,但如果凭据不好并且用户重新键入它们,我会在 firefox 上收到以下错误

Error: Sys.WebForms.PageRequestManagerServerErrorException:    
Sys.WebForms.PageRequestManagerServerErrorException: the state information is invalid  
for this page and might be corrupted http.../jquery-1.7.2.js

在我的母版页上

<%-- jQuery --%>
  <script src="<%= ResolveClientUrl("~/Template/Scripts/jquery-1.7.2.js") %>" 
   type="text/javascript"></script>
<%-- jQueryUI --%>
<script src="<%= ResolveClientUrl("~/Template/jqueryui/js/jquery-ui-1.8.21.custom.min.js") %>"
   <script type="text/javascript" src="<%= ResolveClientUrl("~/Template/Scripts/jquery.fancybox-1.4.3.min.js") %>">
</script>
<script type="text/javascript" charset="utf-8">
    $(document).ready(function () {
        $("#LoginLightBox").fancybox({
            width: 300,
            height: 750,
            scrolling: "no"
        });
        $("#RegistroLightbox").fancybox({
            width: 300,
            height: 750,
            scrolling: "no"
        });
    });

</script>
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
</asp:ContentPlaceHolder>
<body id="page1">
<form id="Form1" runat="server">
<asp:ScriptManager ID="ScriptManager" runat="server">
</asp:ScriptManager>
<div >
<li style="display:inline"><a class="labelsTipolinks" id="LoginLightBox" href="Login.aspx?iframe=true">Login</a></li>
<li style="display:inline;color: #C53005;">|</li>
<li style="display:inline"><a class="labelsTipolinks"  id="RegistroLightbox" href="RegistroUsuario.aspx?iframe=true">Registro</a></li>   

在内容页面上:

<%@ Register TagPrefix="uc1" TagName="Login" Src="~/Controles/Login.ascx" %>

最后是用户控件:

<div style="margin-top: 20px">
    <asp:UpdatePanel runat="server" ID="updPanelLoginIncorrecto">
        <ContentTemplate>
            <asp:CustomValidator ForeColor="Red" OnServerValidate="usuarioExistente_Validation"
                Display="Static" Font-Size="Small" runat="server" ID="vldLogin" 
                ValidationGroup="grupoValidacionLoginUsuario"
                Text="<%$ Resources:LocalizedText, MsjError_LoginIncorrecto%>">
            </asp:CustomValidator>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnLoginLightbox" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
</div>
<div class="tableContent" style="float: right;">
    <asp:Button CssClass="button" ID="btnLoginLightbox" Text="Login" runat="server" OnClick="btnLogin_Click"
        ValidationGroup="grupoValidacionLoginUsuario" />
</div>

请帮助这让我发疯。我已经尝试将 eventvalidation 设置为 false、sessions、response.cache.setno... 等,但没有任何效果。

编辑

我得到错误的那一行在 jquery 1.7.2.js 上,并且在说 jQuery.dequeue(elem, type);

编辑 2

我最终将fancybox 作为内联元素放入主控中,但这不是我想要的解决方案。请帮帮我!!!!!!

【问题讨论】:

  • 此页面是托管在单个服务器上,还是有可能在负载平衡环境中交叉发布到不同的服务器?如果是这样,则用于视图状态的加密可能会在不同的服务器上使用不同的密钥,并导致您遇到问题。您还可以调查 web.config 中的 MaxPageStateFieldLength 属性。
  • 它在开发环境中,所以开发的机器是服务器
  • 好的。远射。这里有一篇知识库文章也指出了这个问题,也许它会有所帮助:support.microsoft.com/kb/323744。您可以尝试“干净的解决方案”并完全重建您的项目,因为知识库文章中的问题可能是由 ASP.NET 临时文件位置的更改引起的。如果某些元数据中存在任何“陈旧”信息,则可能与您的问题有关。
  • 我清理了 rebuiled 但仍然是同样的问题。真正奇怪的一件事是,如果我在第一次回发后将注意力集中在两个文本框(用户名和密码)上并写更多字符,最终会起作用......非常奇怪
  • 那么我强烈建议您的视图状态被嵌套在控件中的某些 javascript 破坏。 ASP.NET 对视图状态执行“健全性检查”,如果在它可以检查的范围之外对其进行了更改,您将得到一个损坏/失败,正如您在此处看到的那样。

标签: jquery asp.net iframe exception-handling fancybox


【解决方案1】:

经过数周的尝试,我尝试输入 type:"iframe" 并且神奇地成功了!我不知道必须做什么,但现在它可以工作了:) 所以代码是:

<script type="text/javascript" charset="utf-8">
$(document).ready(function () {
    $("#LoginLightBox").fancybox({
        type: "iframe",
        width: 300,
        height: 750,
        scrolling: "no"
    });
    $("#RegistroLightbox").fancybox({
        type: "iframe",
        width: 300,
        height: 750,
        scrolling: "no"
    });
});

</script>

【讨论】:

    【解决方案2】:

    我过去遇到过类似的问题。我相信它处理在母版页上的&lt;head&gt; 中有&lt;% %&gt;,但是我可能弄错了。用这个替换你的母版页,如果它解决了问题,请告诉我。

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/jquery-ui.min.js"></script>
    <script type="text/javascript" src="~/Template/Scripts/jquery.fancybox-1.4.3.min.js">
    </script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#LoginLightBox").fancybox({
                width: 300,
                height: 750,
                scrolling: "no"
            });
            $("#RegistroLightbox").fancybox({
                width: 300,
                height: 750,
                scrolling: "no"
            });
        });
    
    </script>
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
        </head>
    <body id="page1">
    <form id="Form1" runat="server">
    <asp:ScriptManager ID="ScriptManager" runat="server">
    </asp:ScriptManager>
    <div>
        <ul>
    <li style="display:inline"><a class="labelsTipolinks" id="LoginLightBox" href="Login.aspx?iframe=true">Login</a></li>
    <li style="display:inline;color: #C53005;">|</li>
    <li style="display:inline"><a class="labelsTipolinks"  id="RegistroLightbox" href="RegistroUsuario.aspx?iframe=true">Registro</a></li>
    </ul>
        </div>
    </form>
    </body>
    </html>
    

    【讨论】:

    • 不,它没有用。此外,我无法删除 因为母版页被不在同一文件夹中的其他内容页面引用。无论如何,谢谢你的建议。
    • 你能把你的&lt;%@ Master %&gt;发给我吗?
    • 这是你的意思吗?你需要master的哪一部分?重要的是我放了什么!
    • 我已经做了一些测试,并且无法访问您的代码,很难说出问题所在。但是,我的建议是访问此站点:fancyapps.com/fancybox,下载文件并将其应用到您的&lt;head&gt;。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多