【问题标题】:gridview pageindexchange error: The state information is invalid for this page and might be corrupted(alternative solution needed)gridview pageindexchange 错误:此页面的状态信息无效并且可能已损坏(需要替代解决方案)
【发布时间】:2014-09-10 10:13:26
【问题描述】:

引导模式是使用远程生成的

 <a data-toggle="modal" data-target="#modal-panel" href="AdminUserMaintenance.aspx?id=<%# Eval("ProviderUserKey")%>" title="Edit" class="button-icons"><span class="glyphicon glyphicon-pencil"></span></a>

到目前为止,可能会发生错误,因为当 pageindex 更改时,__viewstate 是由于模式中 gridview 中的 databind() 而更改,如果我将 gridview 从引导程序移动到新页面,则 gridview 分页工作正常,如果在boostrap modal里面,第一次点击任何分页后,第二次点击分页都会报错,有什么替代方法吗?

部分错误

System.Web.HttpException (0x80004005):此页面的状态信息无效,可能已损坏。 ---> System.Web.UI.ViewStateException: 无效的视图状态。

代码背后

Protected Sub gvAdminUser_PageIndexChanging(sender As Object, e As GridViewPageEventArgs)
    gvAdminUser.PageIndex = e.NewPageIndex
    bindDataGrid()
End Sub

Private Sub bindDataGrid()
    gvAdminUser.PageSize = _iMaximumRows
    Dim oUser As MembershipUser = Membership.GetUser(UserID)
    gvAdminUser.DataSource = Roles.GetAllRoles
    gvAdminUser.DataBind()
End Sub

引导表单的一部分

<asp:UpdatePanel ID="pnlUpdate" runat="server">
                    <ContentTemplate>
                        <asp:GridView ID="gvAdminUser" runat="server" AutoGenerateColumns="false" 
                            AllowPaging="true" EmptyDataText="No Data Found" BorderStyle="None"OnPageIndexChanging="gvAdminUser_PageIndexChanging">
                            <PagerSettings Mode="Numeric" Position="TopAndBottom" />
                            <Columns>
                                <asp:TemplateField HeaderText="Role" HeaderStyle-Width="40%" ItemStyle-HorizontalAlign="Left">
                                    <ItemTemplate>
                                        <asp:Label runat="server" ID="RoleNameLabel" Text='<%# Container.DataItem %>' />
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                    </ContentTemplate>
                </asp:UpdatePanel>

到目前为止的参考

ASP.NET Error:The state information is invalid for this page and might be corrupted

http://blog.syedgakbar.com/2007/11/one-possible-reason-for-the-state-information-is-invalid-for-this-page-exception/

The state information is invalid for this page and might be corrupted. (Only in IE)

http://social.msdn.microsoft.com/Forums/vstudio/en-US/cc8b2fe2-ede4-4c95-b1a9-ed9002e6a0b7/the-state-information-is-invalid-for-this-page-and-might-be-corrupted?forum=netfxbcl

【问题讨论】:

    标签: jquery vb.net gridview webforms bootstrap-modal


    【解决方案1】:

    只是猜测,

    所以你提到了modal is generated using remote,这可能是你有无效视图状态的原因。在页面和模态框都尝试view source,看看它们是否都生成了视图状态。

    看起来像这样

    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="SOMESTUFFHERE" />
    

    如果您确实有两个视图状态,请尝试使用 javascript 删除模式弹出窗口上的视图状态,如果这不起作用,请尝试从服务器的响应(生成模式的响应)中删除视图状态

    【讨论】:

    • 你说的是对的,我曾尝试使用 jquery 将其删除,但猜测 asp.net 在代码后面的某处更改了视图状态,因此使用 jquery 将其删除将不起作用
    • 我明白了。看来您已经解决了这个问题,否则,您可以尝试在视图状态到达浏览器之前直接从服务器的响应中删除它。
    【解决方案2】:

    第一次发现 这里的问题是 asp.net viewstate 问题,两个表单都会创建自己的__viewstate,而 asp.net 认为最顶层的表单是子表单,在子表单中单击分页时会出现异常

    <form id="parent">
    ...
    </form>
    <modal id="child">
    <form></form>
    </modal>
    

    第二次发现 我尝试将子表单移动到顶部和父表单在底部,它运行良好,没有异常命中,一切正常,但父表单将重定向到子页面,没有任何样式,任何按钮单击事件,这很沮丧

    <modal id="child">
    <form></form>
    </modal>
    <form id="parent">
    ...
    </form>
    

    最终解决方案 经过几天的挫折,我决定更改代码并重写一个新代码,这是一种使用 iframe 显示模式弹出窗口的替代方法,这是迄今为止我能找到的替代方法,它工作得很好

    链接

     <a href="#" data-target="AdminUserMaintenance.aspx?id=<%# Eval("ProviderUserKey")%>" class="button-icons boot-frame"><span class="glyphicon glyphicon-pencil"></span></a>
    

    脚本

    function ShowBootstrapModal(destLink) {
    
        var modal = "<div class=\"modal fade\" id=\"iframeModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">"
        modal = modal + "<div class=\"modal-dialog modal-lg\">";
        modal = modal + "<div class=\"modal-content\">";
        modal = modal + "<iframe src='" + destLink + "' frameborder='0' scrolling='no' seamless='seamless' allowTransparency='true' width='900px' height='0'></iframe>";
        modal = modal + "</div>";
        modal = modal + "</div>";
        modal = modal + "</div>";
    
        var $modal = $(modal);
        $modal.append('body');
        $modal.modal({
            backdrop: 'static'
        });
    
        $('body').addClass('modal-open');
        $modal.modal("show");
    }
    
    $('.boot-frame').click(function (e) {
         e.preventDefault();
         var $this = $(this);
         ShowBootstrapModal($this.data("target"));
    });
    

    在子模态中,我添加了一个代码,以便 iframe 将通过内部内容大小扩展高度,更改按钮关闭

    $(function () {
                Sys.Application.add_load(ParentScript);
            });
    
            function ParentScript() {
                var $iframe = $('iframe', window.parent.document);
                var $child = $iframe.contents().find('body .modal-body').children().height();
                $iframe.animate({
                    height: $child + 160
                }, {
                    queue: false,
                    duration: 500
                });
    
                $('.frame-close').click(function () {
                    parent.updatePanel(); //call parent script to do refresh
                    var $parent = $(window.parent.document).contents("html");
                    var $backdrop = $parent.find('.modal-backdrop');
    
                    if ($backdrop.length > 1) {
                        $backdrop.slice(1).remove();
                    } else {
                        $backdrop.remove();
                    }
    
                    $parent.find('body').removeClass("modal-open");
                    $parent.find('#iframeModal').remove();
    
                });
            }
    

    我分享了这个想法,希望遇到同样问题的人最终可以解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      相关资源
      最近更新 更多