7
votes

Comment s'assurer que JS est inclus dans le fichier ASCX?

Le problème est que le problème est le suivant:

J'ai propre contrôle de l'utilisateur. qui a un fichier javascript dans la balise de script inclus dans ce xxx

ou du code JavaScript directement sur la page ASCX. Tout fonctionne si je place ce contrôle quelque part dans l'ASPX Markup. Mais si j'ajoute ce contrôle à la page de manière dynamique à un support de lieu de mise à jour sur le poteau de publication (il s'agit de la logique, je ne peux pas modifier), contrôler les rendoirs lui-même, puis je reçois un message d'erreur JS, ce qui dit que les fonctions sont placées dans certains.js sont non défini / sont nuls. Pourquoi cela arrive-t-il ? Y a-t-il de toute façon pour forcer JS, y compris dans ce cas.

Désolé d'être assez spécifique mais le montant du code est énorme et je n'ai pas été en mesure de fournir un exemple simplifié avec la même erreur ,.

Le script est inclus mais d'une manière ou d'une autre aux fonctions ne sont pas définis. Je suis novice à JS, alors est-il possible que juste le script soit inclus mais non exécuté, les fonctions ne sont donc pas déclarées ???

L'intéressant est que si sur une page, mon contrôle personnalisé est déclaré. en Aspx. L'ajout d'autres instances ne provoque pas de problème de manière dynamique.


0 commentaires

3 Réponses :


0
votes

Êtes-vous sûr que votre fichier JS est en cours de chargement? Il est possible que le fichier ne soit pas au bon endroit - N'utilisez pas ../ Dans le chemin car cela est relatif et peut vous tromper si vous partagez ceci et que les pages ne sont pas toutes à la même profondeur:

Faites quelque chose comme ceci: xxx


1 commentaires

Le fichier JS est en cours de chargement si le contrôle est déclaré dans le fichier ASPX. Je n'obtiens ce problème que si ce contrôle est ajouté à un espace réservé à l'intérieur de l'UpdatePanel de manière dynamique sur certains post-retours. J'ai également essayé d'inclure ces scripts directement dans le fichier ASCX. ne marche pas.



2
votes

Pourquoi ne pas y comprendre dans scriptmanager.scripts comme celui-ci?

 ScriptManager.GetCurrent(Page).RegisterClientScriptInclude(
            this,
            typeof(Page),
            "UniqueScriptKey",
            ResolveClientUrl("~/somefile.js"));


5 commentaires

puis-je la récupérer en quelque sorte? Il est déclaré sur la page maître que je ne peux pas modifier. J'ai essayé d'enregistrer le fichier via ClientscriptManager dans le fichier ASPX.CS, mais cela n'a pas fonctionné.


J'ai ajouté une autre méthode pour ajouter des scripts. Voir Modifier.


Découvrez également l'exemple de cette page MSDN. msdn.microsoft.com/us-fen/library/ ...


Il faudrait être dans un scriptManagerProxy très probablement, car il ne peut y avoir qu'un seul scriptManager, et la plupart des gens mettent cela dans la page ou la page principale.


ScriptManager.getCurrent (page) Obtient une référence au gestionnaire de script disponible sur cette page (pourrait provenir de la page maître de sa page). Voir msdn.microsoft.com/en-us / Bibliothèque / ...



17
votes

Dans l'événement de chargement de votre contrôle, faites quelque chose comme ceci:

if (!Page.ClientScript.IsClientScriptIncludeRegistered("keyName"))
    Page.ClientScript.RegisterClientScriptInclude("keyName",
        Page.ResolveUrl("~/Scripts/MyJavaScript.js"));


0 commentaires