asp.net – WebForms:MasterPages中的动态(或绝对)脚本标记

前端之家收集整理的这篇文章主要介绍了asp.net – WebForms:MasterPages中的动态(或绝对)脚本标记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题

使用MasterPages时,我遇到的一个常见烦恼是master中的脚本标签与消费页面相关.

因此,例如,如果您的消费页面位于应用程序的根目录中,那么您的JavaScript可能会起作用,但是当您将另一个页面放在子文件夹中时,相对路径会中断,并且找不到JavaScript.在这种情况下,没有办法使用我所知道的绝对路径.

最后一次,我决定真正攻击这个并找到一个好的解决方案.

提出的解决方

我尝试了一种策略,围绕在Page_Load中调用ClientScriptManager.RegisterClientScriptInclude,但似乎没有呈现任何内容(授予,我对相关管道的理解不完整).

我尝试了另一个看起来像这样的东西:

<script language="javascript" src='<%= ResolveClientUrl("~/js/ddnmenu.js") %>' type="text/javascript"></script>

…但是会引发异常:无法修改Controls集合,因为控件包含代码块.

工作(但有点难看)代码

所以,我最终得到的是Head中的Literal控件,我在其中呈现相应的Html:

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

这是有效的,但我并没有对它嗤之以鼻,因为对于一个非常普遍的问题来说,似乎有点过多的解决方法.有没有更好的办法?

解决方法

我到处都使用app相对语法.它确实有一个缺点,如果您更改应用程序名称/路径,那么您有很多工作要做更新所有的URL.

< script language =“javascript”src =“/ MyAppName / Includes / MyJavascriptFile.js”>

或者如果您正在使用根应用程序,那么:

< script language =“javascript”src =“/ Includes / MyJavascriptFile.js”>

原文链接:https://www.f2er.com/aspnet/245808.html

猜你在找的asp.Net相关文章