0

我想使用 Javascript 在应用程序中显示所有未处理的异常。为此,我在页面的自定义基类中定义了 onError 事件。这是我的基本页面的代码:

namespace Loan
{

  public class BasePage : System.Web.UI.Page
  {
        public BasePage()
        {

        }

    protected override void OnError(EventArgs e)
    {
        //Report Error
        Exception ex = Server.GetLastError();

        if (ex is HttpUnhandledException && ex.InnerException != null)
        {
            ex = ex.InnerException;
        }

        var _message = "Error : "+ ex.Message.ToString();

        DisplayAlert(_message);

        Server.ClearError();
        return;
    }

    protected virtual void DisplayAlert(string message)
    {
        ClientScript.RegisterStartupScript(
                        this.GetType(),
                        Guid.NewGuid().ToString(),
                        string.Format("alert('{0}');", message.Replace("'", @"\'")),
                        true
                    );
    }
  }
}

对于未处理的异常,永远不会显示警报。但是,如果我从任何页面调用 DisplayAlert

base.DisplayAlert(ex.Message);

将显示 javascript 警报。如何从基本页面获取未处理的异常显示的 javascript 警报。或者是否有任何其他方式向用户显示这些异常消息。我不想将它们重定向到通用错误页面,因为它来回发送它们。

4

1 回答 1

1

这是意料之中的。如果异常未处理,则BasePage上的 OnError 事件将执行,您的子页面将不会继续执行,因为 BasePage 是纯代码,因此无需渲染任何内容。如果您想吐出警报,您需要直接写入响应,但在发生未处理的异常后您仍然应该看到一个空白页。

 protected virtual void DisplayAlert(string message)
 {
        Response.Write(string.Format("<script>alert('{0}');</script>", message.Replace("'", @"\'")));
 }

当然,当你DisplayAlert直接调用时,它是有效的,因为你只是调用一个方法,Page 执行正常继续。

坦率地说,我不喜欢你的方法。您应该记录异常并重定向到另一个页面,这是典型Oooooooooopsss, me screwed up的事情。

于 2012-05-03T19:06:42.720 回答