Проблема с асинхронными вызовами ASP.NET, ожидание возврата обработчика - PullRequest
1 голос
/ 17 января 2009

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

Мы используем ASP.NET с C #.

Когда пользователь нажимает кнопку на странице, мы вызываем инструмент для сохранения переменных сеанса в текущем состоянии представления формы (некоторые идентификаторы, которые используются).

Затем мы вызываем окно GreyBox с другими функциями.

Поскольку это асинхронный режим, greybox не ожидает ответа от обработчика.

Во многих случаях серый ящик загружается до того, как переменные сеанса сохраняются в состоянии просмотра, и в этом случае серый ящик не имеет необходимых идентификаторов.

На локальном хосте достаточно быстро, чтобы мы никогда не осознавали проблему. На производстве это проблема.

Какое здесь будет правильное решение?

Ответы [ 2 ]

4 голосов
/ 17 января 2009

Асинхронный вызов к серверу для сохранения сеанса вернет ответ клиенту. Не запускайте greybox, пока не получите успешный ответ от сервера. Если в вашей форме есть только одна причина, вызывающая асинхронные обратные вызовы, вы можете подключиться к ответу, выполнив следующее:

<script type="text/javascript">
    //<![CDATA[
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(endRequest);
    function endRequest(sender, e) {
        // Do stuff
    }
    //]]>
</script>

Более сложные сценарии см. В статье на MSDN на эту тему.

0 голосов
/ 20 января 2009

Вы должны убедиться, что ваш дополнительный код выполняется в методе обратного вызова из вашего запроса AJAX.

Если вы вручную вызываете веб-сервис или метод страницы, метод Sys.Net.WebServiceProxy.invoke принимает обратный вызов: http://msdn.microsoft.com/en-au/library/bb383814.aspx

У меня такое ощущение, что PageRequestManager, предложенный Дэвидом, работает, только если вы используете UpdatePanel для выполнения запроса AJAX.

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