Как проверить, выполняется ли обратная передача страницы в зарезервированной функции pageLoad в ASP.NET AJAX - PullRequest
10 голосов
/ 03 сентября 2008

Я ищу способ проверить в pageLoad(), вызван ли этот метод во время события загрузки из-за обратной / асинхронной обратной передачи или из-за загрузки и доступа в первый раз.

Это похоже на Page.IsPostback свойство в коде позади страницы.

ТИА, Рики

Ответы [ 9 ]

6 голосов
/ 05 сентября 2008

Один из способов сделать это - подключить обработчик Application.Load в Application.Init, а затем запустить этот обработчик:

Sys.Application.add_init(AppInit);

function AppInit() {
  Sys.Application.add_load(RunOnce);
}

function RunOnce() {
  // This will only happen once per GET request to the page.

  Sys.Application.remove_load(RunOnce);
}

Это будет выполняться после Application.Init. Это должно быть последним, прежде чем вызывается pageLoad.

3 голосов
/ 03 сентября 2008

@ Даррен: Спасибо за ответ. Я пытался создать pageLoad с аргументом события ApplicationLoadEventArgs в качестве параметра (см. Ниже). Однако согласно это :

Событие загрузки возникает для всех обратных передач на сервер, включая асинхронные обратные передачи.

Как вы указали, свойство isPartialLoad не охватывает все сценарии обратной передачи. Было бы хорошо, если бы аргумент события также содержал свойство isPostback.

   function pageLoad(sender, arg) {
      if (!arg.get_isPartialLoad()) {
          //code to be executed only on the first load
      }
   }

@ mmattax: я ищу свойство, которое можно вызвать со стороны клиента (javascript).

2 голосов
/ 03 сентября 2008

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

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

2 голосов
/ 03 сентября 2008

У вас может быть скрытый ввод, который вы устанавливаете на известное значение на стороне сервера, если это обратный вызов / обратный вызов - и ваш javascript может проверить это значение.

Тем не менее, я очень надеюсь, что для этого есть решение только для клиента.

Редактировать: @mmattax - я думаю, что он ищет решение на стороне клиента - его эквивалент в JavaScript.

0 голосов
/ 16 сентября 2008

Вот наш Ajax-эквивалент isPostback, который мы использовали некоторое время.

public static bool isAjaxRequest(System.Web.HttpRequest request)
    {//Checks to see if the request is an Ajax request
        if (request.ServerVariables["HTTP_X_MICROSOFTAJAX"] != null ||
            request.Form["__CALLBACKID"] != null)
            return true;
        else
            return false;
    }
0 голосов
/ 05 сентября 2008

@ Дейв Уорд: Использование метода RunOnce работает отлично. Это решает мою проблему, не имея обходного пути, чтобы сначала проверить, существует ли обработчик, прежде чем присоединяться к событию.

Я отмечу ваш ответ как принятый ответ. Еще раз спасибо.

0 голосов
/ 05 сентября 2008

@ Дейв Уорд: Обычно это работает. Однако код должен прикрепить событие к объекту поведения. Поскольку создание объекта поведения происходит во время Application.Init, присоединение к этому событию приведет к непредсказуемому поведению.

Будет хорошо, если будет событие PostInit.

0 голосов
/ 05 сентября 2008

Application.Init , вероятно, более подходящее событие для использования, если вы хотите, чтобы код выполнялся только при первой загрузке.

0 голосов
/ 03 сентября 2008

Вы все еще можете использовать Page.IsPostback во время асинхронного вызова.

...