Будут ли завершены вызовы методов AJAX при возникновении исключения? - PullRequest
0 голосов
/ 12 октября 2009

При нажатии пункта меню в моем меню элемент управления ASCX загружается через AJAX на моей панели asp. Для этого у меня есть метод:

public void LoadControl(ControlDestination controlDestination, string filename)
{
    try
    {
        // Load control from file
        Control control = LoadControl(filename);

        // Check control extends BaseForm
          // Do stuff    
        }
        else
        {
            throw new Exception("Web User Control erft niet van BaseForm.");
        }
    }
    catch (ArgumentNullException e)
    {
        // Implement
    }
    catch(HttpException e)
    {
        LoadControl(ControlDestination.Menu, "Error.ascx");
        throw new Exception("User control niet gevonden: " + e.ToString());
    }
}

Когда я устанавливаю точку останова на HttpException, я попадаю туда. Я нажимаю F11 и код в LoadControl выполняется. Затем выскакивает. Все это идет хорошо, но Error.ascx никогда не загружается. Я знаю, что метод работает, потому что когда я хочу загрузить другие объекты ASCX с помощью этого метода, он работает. Но когда я хочу загрузить Error.ascx, это идет не так.

Я могу увидеть Error.ascx, если я закомментирую команду throw new Exception ("Пользовательский контроль niet gevonden" + e.ToString ()); Я хочу, чтобы обе строки были выполнены.

EDIT:

На главной странице у меня есть этот javascript-код, чтобы перехватить некоторые исключения:

function pageLoad() {
    var manager = Sys.WebForms.PageRequestManager.getInstance();
    manager.add_endRequest(endRequest);
    manager.add_beginRequest(beginRequest);
}

function endRequest(sender, args){
    var Error = args.get_error();
    if (Error != null) {
        ToggleErrorOn(true);
        document.getElementById("ErrorContent").innerHTML = Error.message;
        args.set_errorHandled(true);
    }
}

Ответы [ 2 ]

0 голосов
/ 12 октября 2009

При запуске метода на стороне сервера в UpdatePanel ASP.NET выполняет следующие действия:

  1. Перестраивает часть страницы внутри панели с нуля работает через обычный ASP.NET жизненный цикл страницы (ну, немного сокращенно, но близко).
  2. Отправляет HTML панели обратно клиенту.
  3. Перестраивает панель на клиент, использующий Javascript DOM манипуляции.

Если на первом шаге есть необработанный Exception, вызов AJAX завершится неудачно и он не сможет обновить исходную панель. Вот диаграмма с веб-сайта ASP.NET AJAX :

Partial-Page Rendering Overview

Подумайте, что произойдет, если вы бросите необработанное Exception в Page_Load. В этом случае ASP.NET не сможет завершить создание HTML-кода, и он не может сделать это здесь.

0 голосов
/ 12 октября 2009

Неопределенное исключение приводит к сбою панели обновления при любом рендеринге. Вместо этого он передает код ошибки обратно в обработчик AJAX, который отображает сообщение об ошибке.

Таким образом, если вы продолжите генерировать это исключение, ваш Error.ascx никогда не будет обработан.

UPDATE:

Ваш javascript слишком поздно ловит исключение. Конвейер UpdatePanel уже считает себя в состоянии «ошибка». Любое исключение, выброшенное вашим кодовым указателем , но не перехваченное в вашем кодовом элементе , заставит UpdatePanel отбросить весь HTML-код, который он отобразил, и вернуть простой код ошибки. Какая ваша функция JavaScript затем обрабатывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...