我想我会使用 base href
标记以使我的相对 URL 在不同的安装上工作。
在我的母版页中,我有:
<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" runat="server" href="css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
当我使用 http://localhost/myproject/default.aspx
时效果很好,css路径解析良好,如:http://localhost/myproject/css/main.css
但是我有一个子文件夹,reports。当我导航到http://localhost/myproject/reports/default.aspx
时,并查看源代码,这就是我所看到的:
<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" href="../css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
有东西注入(inject)了 ../
进入href
link
的属性标记,这意味着它解析为:http://localhost/css/main.css
没有找到。
这很奇怪,因为它按照我对脚本标记的预期工作;只是链接标签得到了这个注入(inject)。我在 IE 和 Chrome 中查看了源代码,两者都是相同的,所以我假设是 IIS/.NET 正在执行此操作,但它们不应该真正触及 HTML,因为它不是 runat="server"
。稍微玩一下,我发现母版页上的链接标签被修改,但脚本标签没有被修改(如果它们是不带前导“/”的相对 URL)。我认为这是因为它们是“src”属性而不是“href”属性。所以有/没有 base href
将修复一种类型但破坏另一种类型。
我是不是疯了,这是一个错误,还是我理解错了?
编辑:
我实际上并没有对基本标签的 href 进行硬编码。我正在写出从数据库表加载到应用程序内存的设置值。所以它实际上是在做:<base href="<%=Settings.Configuration.website_rooturl%>" />
在我的开发机器上,该值可能是 http://localhost/
或http://localhost/project/
在一个客户网站上,它是 http://www.clientsite.com/
另一个客户端站点是一个虚拟目录 http://www.clientsite2.com/project/
.
最佳答案
<link href="<%= ResolveClientUrl("~/css/main.css") %>" rel="stylesheet" type="text/css" />
关于asp.net - 子文件夹中的 .NET 基本 href 和样式表链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961209/