Как проверить, является ли страница postback в зарезервированной функции pageLoad на ASP.NET AJAX

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

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

ТИА, Рикки

Ответ 1

Один из способов сделать это - подключить обработчик 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.

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

@Dave Ward: Это нормально работает. Тем не менее, код должен присоединить событие к объекту поведения. Поскольку создание объекта поведения происходит во время Application.Init, присоединение к этому событию приведет к непредсказуемому поведению.

Хорошо, если есть событие PostInit.

Ответ 8

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

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

Ответ 9

Здесь наш 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;
    }