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

StackOverflow https://stackoverflow.com/questions/40912

Вопрос

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

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

ТИА, Рикки

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Было бы неплохо, если бы было событие PostInit.

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

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

Вот наш 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;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top