Pergunta

Estou procurando uma maneira de verificar dentro pageLoad() se este método for gerado durante o evento de carregamento devido a um postback/postback assíncrono ou por ter sido carregado e acessado pela primeira vez.

Isto é semelhante a Page.IsPostback propriedade dentro do código por trás da página.

Tia, Ricky

Foi útil?

Solução

Uma maneira de fazer isso é conectar um manipulador Application.Load em Application.Init e, em seguida, fazer com que esse manipulador se desvincule após a execução:

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);
}

Isso será executado após Application.Init.Deve ser a última coisa antes de pageLoad ser chamado.

Outras dicas

@Darren:Obrigado pela resposta.Eu tentei criar pageLoad com argumento de evento ApplicationLoadEventArgs como parâmetro (veja abaixo).Porém de acordo com esse:

O evento load é gerado para todos os postbacks no servidor, o que inclui postbacks assíncronos.

Como você indicou, a propriedade isPartialLoad não cobre todos os cenários de postback.Será bom se o argumento do evento também contiver a propriedade isPostback.

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

@mmattax:Estou procurando uma propriedade que possa ser chamada do lado do cliente (javascript).

O que você pode fazer é conectar-se ao evento de carregamento do Sys.Application aula.você pode então usar a propriedade isPartialLoad do Sys.ApplicationLoadEventArgs aula.Acredito que isso informaria se você está em um postback assíncrono ou não.

Para saber se você está em uma postagem de volta, você terá que lidar com isso no código do lado do servidor e emiti-lo para o cliente.

Você pode ter uma entrada oculta definida como um valor conhecido no lado do servidor se for um postback/retorno de chamada - e seu javascript pode verificar esse valor.

Dito isto, eu realmente espero que exista uma solução somente para cliente para isso.

Editar: @mmattax - acredito que ele esteja procurando uma solução do lado do cliente - o equivalente em JavaScript disso.

Você ainda pode usar Page.IsPostback durante uma chamada assíncrona.

Aplicativo.Init é provavelmente um evento mais apropriado para usar, se você quiser que o código seja executado apenas no primeiro carregamento.

@Dave Ward:Isso normalmente funcionaria.No entanto, o código deve anexar o evento ao objeto de comportamento.Como a criação do objeto de comportamento ocorre durante Application.Init, anexar a esse evento levará a um comportamento imprevisível.

Será bom se houver um evento PostInit.

@Dave Ward:O uso do método RunOnce funciona perfeitamente.Isso resolve meu problema sem ter a solução alternativa para verificar primeiro se o manipulador já existe antes de anexar a um evento.

Marcarei sua resposta como uma resposta aceita.Obrigado novamente.

Aqui está nosso equivalente em Ajax ao isPostback que estamos usando há algum tempo.

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;
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top