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直接呼び出すと、メソッドを呼び出すだけなので機能し、ページの実行は正常に続行されます。

私は率直に言って、あなたのアプローチが嫌いです。例外をログに記録し、別のページにリダイレクトする必要があります。これは典型的Oooooooooopsss, me screwed upなことです。

于 2012-05-03T19:06:42.720 に答える