2010-08-07 4 views
3

J'écris une bibliothèque de classe personnalisée qui contient des contrôles personnalisés (pas de contrôles utilisateur). J'ai des fichiers javascript intégrés qui doivent être enregistrés sur la page.Accès à ToolKitScriptManager/ScriptManager à partir du contrôle personnalisé

Maintenant, puisqu'il s'agit d'une bibliothèque de classes, comment puis-je détecter si utiliser ou non un ToolKitScriptManager ou un ScriptManager? Page.ClientScript est un ClientScriptManager, mais le ferais-je si la page contient le nouveau ToolKitScriptManager?

Répondre

2

Vous pouvez déterminer si la page dans laquelle votre contrôle est instancié utilise un ScriptManager en appelant la méthode statique ScriptManager.GetCurrent(). Si cela renvoie null alors vous pouvez supposer que (en travaillant sur la base que vos contrôles seront utilisés uniquement dans vos sites Web), la page utilise un ToolKitScriptManager plutôt qu'un ScriptManager.

+0

En supposant que la page utilise un ToolKitScriptManager et que la méthode renvoie null, quel est le moyen le plus efficace de trouver le ToolKitScriptManager? Boucle à travers les contrôles de pages jusqu'à ce que je le trouve? – Matt

+2

Étant donné que 'ToolKitScriptManager' dérive de' ScriptManager', je suppose que l'appel de 'ScriptManager.GetCurrent' retournerait (pour une page contenant un ToolKitScriptManager) une référence à ToolKitScriptManager (pour une page qui en contient une, cast comme ScriptManager) ou une référence à un ScriptManager, donc si l'un ou l'autre est sur la page, vous ne devriez pas obtenir 'null' retourné ... – Rob

+0

Vos soupçons sont corrects. Je note également que j'ai trouvé que 'ScriptManager' m'a donné l'instance' ToolScriptManager'. Pour utiliser votre code, il est potentiellement nécessaire d'utiliser explicitement l'espace de noms (par exemple, en appelant 'System.Web.UI.ScriptManager.GetCurrent (this.Page);'). – Brian