asp.net - 子文件夹中的 .NET 基本 href 和样式表链接

标签 asp.net iis href radix relative-url

我想我会使用 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/

相关文章:

asp.net - 创建 m3u8 并从服务器流式传输

c# - 生成并提供在 ASP.NET 中压缩的 gz

html - href 语法 : is it okay to have space in file name

jquery - 在新选项卡/窗口中打开 href mailto 链接

c# - 强制浏览

c# - ASP.NET MVC 下拉列表

asp.net - 具有 Windows 身份验证的 IIS 7.5 Web 应用程序是否需要最终用户具有文件权限?

web-services - 错误 1068 : The dependency service or group failed to start (Windows 7)

asp.net - 在脚本中安装 ASP.NET + SQL Express

javascript - 如果包含关键字,如何突出显示 anchor 中的文本?