从global.asax.cs调用JavaScript函数

meh*_*595 5 javascript c# asp.net scriptmanager global-asax

我想从global.asax.cs文件调用JavaScript函数(内部显示有关错误消息的弹出窗口)。这是我在Global.asax.cs文件中尝试的代码,

protected void Application_Error(object sender, EventArgs e)
{
    System.Web.UI.Page mypage = (System.Web.UI.Page)HttpContext.Current.Handler;
    mypage.RegisterStartupScript("alert", "<script language=javascript>alert('test');</script>");
}
Run Code Online (Sandbox Code Playgroud)

但是,它不会在Firebug和Google Chrome控制台中调用警报,也不会发出任何错误或警告消息。如何调用JavaScript代码?

Ari*_*tos 4

此时您会遇到两种不同类型的错误。

  1. 编译器抛出的错误。
  2. 您的程序引发的错误。

编译器可以在那里抛出任何错误,例如,它无法在后面的代码中找到文字控件。在这种情况下,您的页面甚至不存在,并且无法在此时获取它并发出此 JavaScript 警报。

程序运行时出现的错误(例如空异常)也可能会停止页面呈现,这也会停止页面,并且您不能在那里使用页面处理程序。

所以HttpContext.Current.Handler is NOT a page

一般来说,Application_Error 用于捕获和记录unhandled errors,以便稍后解决它们,并且可能向用户显示更好的错误页面。

如果您只是尝试在调试时查看错误,您可以使用如下代码:

void Application_Error(object sender, EventArgs e)
{
    Exception LastOneError = Server.GetLastError();
    if (LastOneError != null)
    {
        Debug.Fail("Unhandled error: " + LastOneError.ToString());
        LogTheError(LastOneError);
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义错误页面

我能想到做类似事情的唯一方法是当错误出现到解释错误的新页面时进行重定向 - 但这是自定义错误页面已经做的事情。

更多的

这是我处理自定义错误并保持在同一页面上的方式。文件检查是为了避免可能导致池崩溃的闭环。

  string cTheFile = HttpContext.Current.Request.Path;

  if (!cTheFile.EndsWith("ErrorHandlePage.aspx"))
      Server.Transfer("~/ErrorHandlePage.aspx");
Run Code Online (Sandbox Code Playgroud)