6

我有一些引用 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>

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

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

谢谢

4

4 回答 4

18

使用 ResolveUrl("~/")

<script src="<%=ResolveUrl("~/scripts/myscript.js") %>" type="text/javascript"></script>

~/ 将为您提供应用程序的根目录,无论是虚拟的还是其他的

于 2010-03-24T16:40:44.027 回答
4

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

<script src="Scripts/MyScript.js" type="text/javascript"></script>

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

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

于 2010-03-24T16:49:30.857 回答
0

您可以使用 HttpRuntime.AppDomainAppVirtualPath 属性来获取应用程序的虚拟路径(如果有)并使用它来修复 javascript 路径(在 <script> 标签中使用 <%= ... %> 等)

您可以在母版页中进一步添加一个全局 javascript 变量,该变量也公开该值,以便任何需要知道实际应用程序根目录的脚本都可以通过这种方式访问​​它。

于 2010-03-24T16:40:45.510 回答
-1

MVC5 中的另一种方式:

1)在布局html视图文件中,将RenderSection放置在您需要脚本所在的位置:

<html><body>
@RenderSection("scripts1", required: false)
</body></html>

请注意,您可以将“Scripts1”更改为您喜欢的任何名称。

2)在您的视图html文件中,只需调用“scripts1”,无论在哪里,使用您的路径和js文件名:

@Scripts1.Render("~/Scripts/MyScript.js")

3) 确保 MyScript js 文件位于项目的 Scripts 文件夹中。

就是这样。

于 2015-03-04T09:35:05.100 回答