我有一些引用javascript文件的页面。
应用程序存在于虚拟目录中,即http://localhost/MyVirtualDirectory/MyPage.aspx
所以在本地我引用文件如下:
<script src="/MyVirtualDirectory/Scripts/MyScript.js" type="text/javascript"></script>
但生产设置不同。该应用程序在生产中作为自己的网站存在,因此我不需要包含对虚拟目录的引用。这个问题是我需要修改包含javascript引用的每个文件,所以它看起来如下所示:
<script src="../Scripts/MyScript.js" type="text/javascript"></script>
我尝试在本地设置中以这种方式引用文件,但它不起作用。
我是否完全错了?有人可以告诉我我需要做什么吗?
由于
答案 0 :(得分:19)
使用ResolveUrl(“〜/”)
<script src="<%=ResolveUrl("~/scripts/myscript.js") %>" type="text/javascript"></script>
〜/会找到您的应用程序的根,虚拟或其他
答案 1 :(得分:3)
Previous answers似乎假设Scripts
目录始终作为应用程序根目录的子目录存在。如果这个假设是正确的,并且如果页面也在根目录上,那么你早期的两个标签都可以简单:
<script src="Scripts/MyScript.js" type="text/javascript"></script>
但我读到你的第二个例子是Scripts
不是总是应用程序根目录的子目录(因为开头的../
向上移动了一个级别,所以Scripts
将成为您的应用程序根目录的对等方。也就是说,你说第二个例子不起作用。 :-)但如果确实如此,我强烈建议调整一个环境或另一个环境以使相对路径一致,然后始终使用上述相对路径。
据我所知,使用ResolveUrl
的唯一原因是,如果应用程序中的页面位于文件夹结构中,并且标记可能出现在根目录中的页面中或“子目录”中的页面中”。如果是这样,您可以在两种情况下使用ResolveUrl
,以便拥有锚点。我从不以这种方式创作,我始终确保知道页面在层次结构中的位置(如果需要层次结构)并为当前文档使用适当的相对路径。
答案 2 :(得分:0)
您可以使用HttpRuntime.AppDomainAppVirtualPath属性获取应用的虚拟路径(如果有),并使用该路径修复javascript路径(在&lt; script&gt;中使用&lt;%= ...%&gt;标签等。)
您可以在主页面中进一步添加一个公开该值的全局javascript变量,这样任何需要知道实际应用程序根目录的脚本都可以通过这种方式访问它。
答案 3 :(得分:-1)
MVC5中的另一种方式:
1)在布局html视图文件中,将RenderSection放在需要脚本的位置:
<html><body>
@RenderSection("scripts1", required: false)
</body></html>
请注意,您可以更改&#34; Scripts1&#34;无论你喜欢什么名字。
2)在您的视图html文件中,只需调用&#34; scripts1&#34;,无论在哪里,使用您的路径和js文件名:
@Scripts1.Render("~/Scripts/MyScript.js")
3)确保MyScript js文件位于项目的Scripts文件夹中。
那就是它。