2012-04-28 33 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