Question

Je cherche un moyen de vérifier à l'intérieur pageLoad() si cette méthode est déclenchée lors d'un événement de chargement en raison d'une publication/publication asynchrone ou en raison du chargement et de l'accès pour la première fois.

Ceci est similaire à Page.IsPostback propriété dans le code derrière la page.

Tia, Ricky

Était-ce utile?

La solution

Une façon de procéder consiste à connecter un gestionnaire Application.Load dans Application.Init, puis à demander à ce gestionnaire de se dissocier après son exécution :

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

Cela s'exécutera après Application.Init.Cela devrait être la dernière chose avant l'appel de pageLoad.

Autres conseils

@Darren :Merci d'avoir répondu.J'avais essayé de créer pageLoad avec un argument d'événement ApplicationLoadEventArgs comme paramètre (voir ci-dessous).Cependant selon ce:

L'événement de chargement est déclenché pour toutes les publications sur le serveur, ce qui inclut les publications asynchrones.

Comme vous l'avez indiqué, la propriété isPartialLoad ne couvre pas tous les scénarios de publication.Ce serait bien si l'argument de l'événement contenait également la propriété isPostback.

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

@mmattax :Je recherche une propriété qui peut être appelée côté client (javascript).

Ce que vous pouvez faire, c'est vous connecter à l'événement de chargement du Sys.Application classe.vous pouvez ensuite utiliser la propriété isPartialLoad du Sys.ApplicationLoadEventArgs classe.Je pense que cela vous permettrait de savoir si vous êtes dans une publication asynchrone ou non.

Pour savoir si vous êtes dans une publication, vous devrez gérer cela dans le code côté serveur et l'émettre au client.

Vous pouvez avoir une entrée cachée que vous définissez sur une valeur connue côté serveur s'il s'agit d'une publication/rappel - et votre javascript pourrait vérifier cette valeur.

Cela dit, j'espère vraiment qu'il existe une solution réservée au client pour cela.

Modifier: @mmattax - Je pense qu'il recherche une solution côté client - l'équivalent JavaScript de celle-ci.

Vous pouvez toujours utiliser Page.IsPostback lors d'un appel asynchrone.

Application.Init est probablement un événement plus approprié à utiliser, si vous souhaitez que le code ne s'exécute qu'au premier chargement.

@Dave Ward :Cela fonctionnerait normalement.Cependant, le code consiste à attacher un événement à un objet de comportement.Étant donné que la création d'un objet de comportement se produit pendant Application.Init, l'attachement à cet événement entraînera un comportement imprévisible.

Ce serait bien s'il y avait un événement PostInit.

@Dave Ward :L'utilisation de la méthode RunOnce fonctionne parfaitement.Cela résout mon problème sans avoir la solution de contournement pour vérifier d'abord si le gestionnaire existe déjà avant de s'attacher à un événement.

Je marquerai votre réponse comme réponse acceptée.Merci encore.

Voici notre équivalent Ajax à isPostback que nous utilisons depuis un moment.

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;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top