ASP.NET AJAX WebForms自定义错误处理问题
我制作了一个具有以下体系结构的Web应用程序:每个窗体都是一个UserControl,只有一个实际页面(Default.aspx),并且URL中的参数指定要加载哪个UserControl。 UserControl被加载到UpdatePanel中,以便它可以享受完整的AJAX性。ASP.NET AJAX WebForms自定义错误处理问题
我还使用了一个详细的消息显示机制。最终,消息最终会在Default.ASPX顶部的一个指定区域中出现,并带有一些不错的格式化内容。
现在,我还想捕获源自UserControl的任何未处理的异常,并将它显示在这个区域中,并使用我为消息所做的所有铃声和哨子。
我该怎么做?不知何故,Page.Error和ScriptManager.AsyncPostBackError不适用于我...
我不确定你的意思是你的主页上的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
}
}
然后将所有用户控件更改为继承此类。
你可以提供一些你用ScriptManager.AsyncPostBackError试过的更多细节吗?这真的应该是正确的使用。
完整答案在我的博文中 - Unhide Exceptions Hidden By AJAX。
我确实使用AsyncPostBackError()将错误消息从泛型“调用的目标引发的异常”更改为真正的错误消息。我的标签设置为错误文本,然后我告诉AJAX,我与
args.set_errorHandled(true);
对于未处理的错误看看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();
这是一个想法。但也许我可以在Default.aspx级别上以某种方式做到这一点? – 2009-01-12 10:18:34