2012-04-28 29 views
0

我的Asp.net 3.5 Visual Studio 2008 Web应用程序有一个Web页面(Admin.aspx),它带有一个运行冗长过程(30秒+)的按钮事件,然后触发UpdatePanel1.Update( )刷新页面..导致无效操作异常。UpdatePanel Update()会导致InvalidOperationException错误

Admin.aspx有一个母版

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这里(部分),这是由一个代表事件被解雇。

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

回答

0

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

第一手异常并不一定意味着代码中出现了问题,但是遇到了特殊(赦免双关语)的情况,并且取决于您在应用程序中如何处理异常,它可能会或可能不会优雅地结束。我认为这是你的应用程序的情况,你没有处理异常,调试器正在停止这个过程。

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

如果你不想使用try catch语句,你只是想出现你可以去工具>>选项>>调试>>通用和取消选中这样做抑制这些第一或第二个变化异常重定向所有输出窗口的文本即时窗口

基于您的评论

异常可以通过页面的生命周期和服务器意识不到控制作为页面被在局部回传重建造成的。在您的代码示例中,您似乎没有在更新面板中使用任何触发器。如果要在代码中严格确定更新,请将ChildrenAsTriggers的属性更改为更新面板的false。

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

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

+0

尝试catch向我发送此消息..“异常的更新方法只能在所谓的UpdatePanel与ID UpdatePanel1之前渲染” ...但还是不更新。 – CraigJSte 2012-04-28 14:00:08

+0

@CraigJSte根据您的评论更新了帖子。看起来好像在updatepanel中的控件在由部分回发创建之前正试图由服务器调用。将ChildrenAsTriggers设置为false可能会更正此问题。 – rlcrews 2012-04-28 14:45:43

+0

在为ChildrenTriggers修改后的代码仍然会引发此问题(请参见上文)..... Admin.aspx PortTrd Res异常Update方法只能在渲染前使用ID为UpdatePanel1的UpdatePanel上调用。 – CraigJSte 2012-04-28 17:13:09