UpdatePanel Update()导致InvalidOperationException错误

时间:2012-04-28 12:45:45

标签: c# asp.net visual-studio-2008 .net-3.5

我的Asp.net 3.5 Visual Studio 2008 Web App有一个Web页面(Admin.aspx),其中一个按钮事件运行一个冗长的进程(30秒+),然后触发UpdatePanel1.Update()来刷新页面。导致无效操作异常。

Admin.aspx有一个MasterPage

Admin.aspx(部分):

<div id="Tabs">
    <div class="cen2">
        <asp:ScriptManager ID="ScriptManager1" AsyncPostBackTimeOut="360000" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" ChildrenAsTriggers="False" runat="server"
            UpdateMode="Conditional"  >
            <ContentTemplate>

           cont....... >

Admin.aspx.cs here(partial)这是由委托事件触发的。

private void port_trdRes(object sender, DataTable dt)
{

    dlResSum.DataSource = dt;
    dlResSum.DataBind();
    try
    {
        UpdatePanel1.Update();
    }
    catch (Exception webex)
    {
        SendErr("Admin.aspx PortTrd Res Exception " + webex.Message.ToString());
    }
    simtrd.port.trdRes -= new Steury.Trading.TrdSummDelegate(port_trdRes);
}

当我到达UpdatePanel1.Update()时,它总是给我一个

错误

  

类型'System.InvalidOperationException'的第一次机会异常   发生在System.Web.Extensions.dll

1 个答案:

答案 0 :(得分:0)

根据您调试应用程序的方式,处理异常可能会导致此问题。第一手异常并不总是坏的只是在VS中调试器可能被设置为在抛出此类异常时停止。

第一手例外并不一定意味着您的代码出现问题,但遇到异常(原谅双关语)情况,并且取决于您在应用程序中处理异常的方式,它可能会也可能不会优雅地结束。我认为您的应用程序就是这种情况,因为您没有处理异常,调试器正在停止该过程。

您应该尝试在代码中加入try catch statements或try catch finally语句。特别是因为你有长时间运行的异步事件。

如果您不想使用try catch语句而只是想要禁止出现这些第一个或第二个更改例外,您可以转到工具&gt;&gt;选项&gt;&gt;调试&gt;&gt;常规并取消选中将所有输出窗口文本重定向到即时窗口

根据您的评论,异常可能是由页面生命周期和服务器不知道控件引起的,因为页面正在部分回发上重建。在您的代码示例中,您似乎没有在更新面板中使用任何触发器。如果要在代码中严格确定更新,请将更新面板的ChildrenAsTriggers属性更改为false。

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">

Here is a more in-depth explanation of how this property works