如何在ASP.NET项目中正确引用JavaScript文件?

Dav*_*Dev 6 javascript asp.net virtual-directory

我有一些引用javascript文件的页面.

该应用程序存在于虚拟目录中,即http://localhost/MyVirtualDirectory/MyPage.aspx

所以本地我引用文件如下:

<script src="/MyVirtualDirectory/Scripts/MyScript.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

但是生产设置不同.该应用程序在生产中作为自己的网站存在,因此我不需要包含对虚拟目录的引用.这个问题是我需要修改包含javascript引用的每个文件,所以它看起来如下所示:

<script src="../Scripts/MyScript.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

我尝试在我的本地设置中以这种方式引用文件,但它不起作用.

我完全错了吗?有人能告诉我我需要做什么吗?

谢谢

hun*_*ter 19

使用ResolveUrl("〜/")

<script src="<%=ResolveUrl("~/scripts/myscript.js") %>" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

〜/将以虚拟或其他方式告诉您应用程序的根目录


T.J*_*der 5

以前的答案似乎假设该Scripts目录始终作为应用程序根目录的子目录存在。如果这个假设是正确的,并且页面也位于根目录,那么您之前的两个标签都可以是简单的:

<script src="Scripts/MyScript.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

但我对您的第二个示例的理解是,它Scripts 并不总是您的应用程序根目录的子目录(因为一../开始就上升了一个级别,因此Scripts将是您的应用程序根目录的对等目录)。也就是说,你确实说过第二个例子不起作用。:-) 但如果确实如此,我强烈建议调整一种环境或另一种环境,以使相对路径一致,然后始终使用上述相对路径。

ResolveUrl据我所知,使用的唯一原因是应用程序中的页面位于文件夹结构中,并且标签可能出现在根目录的页面或“子目录”的页面中。如果是这样,您可以ResolveUrl在这两种情况下使用,这样您就有了一个锚点。我从不以这种方式创作东西,我总是确保我知道页面在层次结构中的位置(如果需要层次结构)并为当前文档使用适当的相对路径。