我创建了一个具有以下体系结构的Web应用程序:每个表单都是UserControl,只有一个实际页面(Default.aspx),URL中的参数指定要加载的UserControl。 UserControl加载到UpdatePanel中,以便它可以享受完整的AJAX。
我还使用了一个精心设计的消息显示机制。最终消息最终出现在Default.ASPX顶部的一个指定区域,并带有一些很好的格式化内容。
现在,我还想捕获源自UserControl的任何未处理的异常,并将其显示在此区域中,其中包含我为消息制作的所有铃声和口哨声。
我该怎么做? Page.Error和ScriptManager.AsyncPostBackError以某种方式对我不起作用......
答案 0 :(得分:1)
完整的答案在我的博文中发布 - Unhide Exceptions Hidden By AJAX。
我确实使用AsyncPostBackError()将错误消息从通用“调用目标抛出异常”更改为真实错误消息。我为错误文本设置了一个标签,然后告诉AJAX我用
处理了错误args.set_errorHandled(true);
答案 1 :(得分:0)
我不确定您的主页上的Page.Error是否无效或用户控件本身。如果您还没有这样做,可以尝试创建以下类:
public class CustomUserControl : UserControl
{
public new CustomUserControl
{
this.Error += new EventHandler(Page_Error);
}
protected void Page_Error(object source, EventArgs e)
{
Exception exception = HttpContext.Current.Server.GetLastError();
// Message away
}
}
然后更改所有用户控件以继承此类。
答案 2 :(得分:0)
您能否详细介绍一下您使用ScriptManager.AsyncPostBackError尝试过的内容?这应该是正确的选择。
答案 3 :(得分:0)
对于未处理的错误,请查看Global.asax文件...
protected void Application_Error(object sender, EventArgs e)
{
// fired when an unhandled error occurs within the application.
// ..or use an HttpModule instead
}
或创建自定义HttpModule,而不是插入web.config ...
public class UnhandledExceptionModule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication app)
{
app.Error += new EventHandler(app_Error);
}
protected void app_Error(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
Exception ex = app.Server.GetLastError().GetBaseException();