0

我看到了错误:

The state information is invalid for this page and might be corrupted

在我的页面上。根据一些阅读,我认为该错误可能由于多种原因而发生,并且可能很难排除故障。

在 aspx 页面上,我有两个下拉控件:

<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="dsClients" DataTextField="Client_Name" DataValueField="Client_Name" AutoPostBack="True" OnSelectedIndexChanged="DropDownList3_SelectedIndexChanged" ondatabound="DropDownList3_DataBound"></asp:DropDownList>
<asp:DropDownList ID="ddQualIDInsert" runat="server" DataSourceID="dsQual" DataTextField="Project_Name" DataValueField="Qual_ID"></asp:DropDownList>

在文件后面的代码中,我使用 ajax 根据从第一个下拉菜单中选择的值来更新和重建第二个下拉选项:

protected void DropDownList3_SelectedIndexChanged(object sender, EventArgs e)
{
   dsQual.Where = "Client_Name = \"" + ((DropDownList)sender).SelectedValue +"\"";
}

有时会按每个填充的方式获取下拉列表,但大多数情况下会引发错误。

4

2 回答 2

0

我遇到了这个问题,我花了很长时间在我的代码中解决它。


首先是我有 UpdatePanel 和一个 jquery 对话框。下面是我正在使用的脚本。

<script>
     var uiDialog = $('.ui-dialog-container').parent();
     (uiDialog.next().length && uiDialog.appendTo((document.forms.item(0) != null) ?   document.forms.item(0) : document.body));
     //verifyUser();
     function ShowDialog() {

         dialog = $("#dialog-form").dialog({
             autoOpen: true,
             resizable: false,
             height: 400,
             width: 800,
             modal: true,
             overlay: {
                 backgroundColor: '#000',
                 opacity: 0.5
             }


         });
     }



</script>

这是表格

<div id="dialog-form" title="Verify Transaction" style="display:none;" >
    <asp:ScriptManager ID="ScriptManager2" runat="server"  />


            <fieldset style="background-color:#ffd800;border-radius:5px;">

            <label for="fname">First Name    :</label>
            <label for="fname"><%= DetailsView1.Rows[7].Cells[1].Text %></label><br />

            <label for="lname">Last Name     :</label>
            <label for="lname"><%= DetailsView1.Rows[9].Cells[1].Text %></label><br />

            <label for="zip">Zip Code        :</label>
            <label for="zip"><%= DetailsView1.Rows[22].Cells[1].Text %></label><br />



            </fieldset>
    <hr />
    <asp:Button id="btnVerified" runat="server" OnClick="btnVerify_Click" UseSubmitBehavior="false" Text="Verified" />
            <asp:Button ID="btnCancelled" runat="server" OnClientClick="dialog.dialog('close')" Text="Cancelled" UseSubmitBehaviour="false"/>


</div>

在这里,我们看到我在按钮控件中使用服务器端和客户端脚本。对他们来说,重要的是从对话框中删除表单标签,将脚本放入 UpdatePanel 并设置 UseSubmitBehaviour="false"。这将导致对话框回发,这是我们需要转到服务器端的内容。

最初我有表单标签。一旦我删除了表单标签,它就会执行事件 OnClientClick 和 OnClick 服务器端事件。干杯!!如果任何机构有这个问题,这里就是解决方案。

以下问题终于得到解决:

  1. 客户端事件执行。
  2. 使用 jQuery-UI 对话框弹出的服务器端事件执行。
  3. 对话框执行 PostBack,这意味着我们可以在对话框内拥有一个带有控件的完整 ASP.NET 表单。
  4. “状态信息对此页面无效并且可能已损坏”的问题已得到解决。

注意:我在表单中使用 DetailsView 控件。

干杯!!

于 2014-07-09T09:35:29.447 回答
0

您正在动态更改您的页面(服务器端控件),并且这会更改view state页面,因此在回发时,ASP.NET 会解密view state并且与预期的不匹配。

于 2013-04-11T13:35:21.873 回答