6
votes

WebForms: balises de script dynamiques (ou absolues) dans Masterpages

problème strong>

Lorsque vous travaillez avec des chefs-pages, une irritation commune que je rencontre est que les balises de script dans le maître sont relatives à la page consommatrice. P>

Donc, par exemple, votre JavaScript pourrait fonctionner si votre page consommatrice est à la base de votre application, mais lorsque vous mettez une autre page dans un sous-dossier, le chemin relatif se casse et le JavaScript n'est pas trouvé. Et il n'y a pas de moyen d'utiliser des chemins absolus dont je suis au courant dans ce cas. P>

Cette dernière fois, j'ai décidé de vraiment attaquer cela et de trouver une bonne solution. p>

Solutions proposées forte> P>

J'ai essayé une stratégie qui a tourné autour de Calling ClientcriptManager.registerclientscriptions dans la page_load, mais cela n'a pas semblé rendu (accordé, mon La compréhension de la plomberie correspondante est incomplète). p>

J'ai essayé un autre qui a ressemblé à ceci comme ceci: p> xxx pré>

... mais qui jette une exception: la collection de contrôles ne peut pas être modifiée car le contrôle contient des blocs de code. P>

Code de travail (mais quelque peu fugchy) strong> p>

donc, ce que j'ai fini par aller, c'est un contrôle littéral dans la tête où je restitue Le HTML approprié: p>

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Me.SetupLiteralScriptsTag()
End Sub

Private Sub SetupLiteralScriptsTag()
    'Build the script tags to import our JavaScript
    Dim Builder As New StringBuilder

    Builder.AppendLine(String.Format("<script type=""text/javascript"" src=""{0}""""></script>", ResolveClientUrl("~/js/jquery-1.3.2.min.js")))
    Builder.AppendLine(String.Format("<script type=""text/javascript"" src=""{0}""""></script>", ResolveClientUrl("~/js/jquery.corners.min.js")))
    Builder.AppendLine(String.Format("<script type=""text/javascript"" src=""{0}""""></script>", ResolveClientUrl("~/js/bg.pos.js")))
    Builder.AppendLine(String.Format("<script type=""text/javascript"" src=""{0}""""></script>", ResolveClientUrl("~/js/moonstone.js")))

    Me.LiteralScriptTags.Text = Builder.ToString
End Sub


0 commentaires

5 Réponses :


3
votes

J'utilise une syntaxe relative de l'application partout. Il dispose de l'inconvénient que si vous changez de nom / chemin de l'application, vous avez beaucoup de travail pour mettre à jour toutes vos URL.