3 votes

Comment puis-je avoir accès à l'API côté client d'ASP.NET à tout moment ?

Un peu de contexte. Le projet est une application Web VS 2005 utilisant ASP.NET AJAX Extensions 1.0.

Question : Comment puis-je référencer les fichiers JavaScript qui sont utilisés par le contrôle Scriptmanager, sans utiliser le contrôle ScriptManager ou comment puis-je charger les fichiers JS du ScriptManager plus tôt (je ne pense pas que cela soit possible car le ScriptManager doit être dans la balise de formulaire côté serveur) ?

J'ai un contrôle ScriptManager dans une page maître, mais très souvent, il y a des pages qui sont juste de bons vieux postbacks non-asynchrones et je crée des objets côté client avant que le gestionnaire script ne soit chargé. Maintenant je sais que c'est une bonne pratique de charger les script vers la fin du balisage et les CSS au début, mais dans mon cas, certains des script que je crée doivent être avant, typiquement dans la balise head parce que par exemple j'aurai un repeater qui instancie un objet côté client.

Voici donc ce que j'aimerais :

// Mes scripts

Pour l'instant, voici ce que je fais pour contourner le problème :

(function() {
   var myInterval;

   myInterval = setInterval(function() {
      if (!Type) {
         return;
      }

      clearInterval(myInterval);

      Type.registerNamespace("Awesome");

      Awesome.Widget = function() {
         var _this = this;

         this.myProperty = 'This is awesome';
      }
   }, 40);
})();

ou je fais ça :

var Awesome = {};

Awesome.Widget = function {
   /// Awesome code.
}

De plus, il serait bien de ne pas charger ces scripts deux fois car le contrôle ScriptManager sera rendu à un moment donné puisqu'il se trouve dans ma MasterPage.

Peut-être que le problème est que je m'y prends de la mauvaise façon. Toute aide est la bienvenue.

2voto

Zhaph - Ben Duguid Points 18573

Lorsque vous utilisez les contrôles MS AJAX, vous pouvez tirer parti de la fonction de câblage automatique pageLoad le nom de la fonction, et mettez le code là-dedans.

Votre pageLoad est appelée lorsque le document est prêt, que tout est chargé et que vous pouvez manipuler le DOM à votre guise (c'est un peu comme la fonction document.ready de jQuery, mais elle se déclenche un peu plus tard).

Plus de détails peuvent être trouvés sur le site Événements du cycle de vie du client AJAX page.

function pageLoad(sender, args){
  Type.registerNamespace("Awesome");

  Awesome.Widget = function() {
     var _this = this;

     this.myProperty = 'This is awesome';
  }
}

Si vous ne vous souciez pas de savoir si le document est prêt, mais que vous pouvez vous contenter que tous les scripts soient chargés et analysés, vous pouvez vous brancher sur la fonction événement déclencheur à la place.

// Attach a handler to the init event.
Sys.Application.add_init(applicationInitHandler);

function applicationInitHandler() {
  Type.registerNamespace("Awesome");

  Awesome.Widget = function() {
     var _this = this;

     this.myProperty = 'This is awesome';
  }
}

0voto

Rob Windsor Points 5009

Je ne suis pas sûr de suivre votre question, mais j'espère que cela vous aidera. La méthode standard pour s'assurer que vous avez accès aux bibliothèques ASP.NET AJAX côté client consiste à ajouter un contrôle ScriptManager à votre page principale, puis à utiliser des contrôles ScriptManagerProxy dans les pages de contenu, les contrôles d'utilisateur et les composants WebPart si nécessaire.

Les paramètres des contrôles ScriptManagerProxy sont combinés avec ceux du ScriptManager de la page maîtresse pour garantir que le code JavaScript approprié est mis à la disposition de la page.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X