我的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
中
答案 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