0

我的 Asp.net 3.5 Visual Studio 2008 Web App 有一个带有按钮事件的网页 (Admin.aspx),该按钮事件运行一个漫长的过程(30 秒 +)然后触发 UpdatePanel1.Update() 以刷新页面.. 导致 Invalid操作异常。

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.Web.Extensions.dll 中出现“System.InvalidOperationException”类型的第一次机会异常

4

1 回答 1

0

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

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

您应该尝试将try catch 语句或 try catch finally 语句的使用合并到您的代码中。特别是因为您有长时间运行的异步事件。

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

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

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

这是对该属性如何工作的更深入的解释

于 2012-04-28T13:07:25.040 回答