Вызов функции JavaScript из global.asax.cs - PullRequest
4 голосов
/ 21 июля 2011

Я хочу вызвать функцию JavaScript (которая внутренне показывает всплывающее окно с сообщением об ошибке) из файла global.asax.cs.Вот мой код, который я пробую в файле 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>");
}

Но он не вызывает оповещение и не выдает сообщение об ошибке или предупреждение в Firebug и GoogleХромированная консоль.Как можно вызвать код JavaScript?

Ответы [ 4 ]

4 голосов
/ 21 июля 2011

В этот момент вы получаете два вида ошибок:

  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);
    }
}

Пользовательская страница ошибки

Единственный способ, которым я могу придумать что-то похожее, - это сделать перенаправление, когда ошибка появляется на новой странице, которая объясняет ошибку - но эточто пользовательская страница ошибок уже делает.

Подробнее

Таким образом я обрабатываю свои пользовательские ошибки и остаюсь на той же странице.Проверка файла состоит в том, чтобы избежать возможного цикла закрытия, который может привести к падению пула.

  string cTheFile = HttpContext.Current.Request.Path;

  if (!cTheFile.EndsWith("ErrorHandlePage.aspx"))
      Server.Transfer("~/ErrorHandlePage.aspx");
2 голосов
/ 21 июля 2011

Это записывает на страницу и открывает окно сообщения.Я положил его в файл global.asax.cs (код позади).Протестировано с ошибкой деления на ноль:

void Application_Error(object sender, EventArgs e)
{
    String ErrorStr = "Application_Error " + Server.GetLastError().Message;

    Response.Write("<h2>Global Page Error</h2>\n");
    Response.Write("<p>" + ErrorStr + "</p>\n");

    Response.Write("<Script Language='javascript'> alert('Hello');</script>");

    // Clear the error from the server
    Server.ClearError();
}
0 голосов
/ 21 июля 2011

Страница MSDN Метод Page.RegisterStartupScript (String, String) содержит пример того, что вы пытаетесь сделать.

Мне кажется, ваша проблема в том, чтокогда вы регистрируете скрипт на этой странице, уже слишком поздно.Жизненный цикл объекта страницы завершен, и он не будет предоставлять никаких дополнительных данных на страницу.

0 голосов
/ 21 июля 2011

Быстрый ответ: вы не можете.

В Global.asax нет страницы, поэтому нет контекста, в котором запускается javascript.

...