样式表路径中的斜杠 (/) 和波浪号斜杠 (~/) 有何区别?

55

ASP.NET 提供了两种指定样式表路径的方法:

<link href="/common/black_theme/css/style.css" rel="stylesheet">   (this is working)
<link href="~/common/black_theme/css/style.css" rel="stylesheet">  (this is not working)
  • 这些路径是如何解析的?
  • 为什么生成的路径不同?
  • 在哪种情况下应该选择哪个路径?

就我所知,~代表应用程序的根目录。 在IIS中,“common”是站点根目录(名为testsite.demo)下的文件夹。

物理路径:D:\Physicalpath\WarpFirstSite\testsite.demo
“common”文件夹:D:\Physicalpath\WarpFirstSite\testsite.demo\common

3个回答

102
  • / - 网站根目录
  • ~/ - 应用程序的根目录

区别在于如果你的网站是:

http://example.com

您有一个应用程序myapp在以下位置:

http://example.com/mydir/myapp

/将返回站点的根目录(http://example.com),

~/将返回应用程序的根目录(http://example.com/mydir/)。


3
@Kyasa - 你需要解释什么? - Oded
我对应用程序路径感到困惑。它是站点http://example.com映射到的物理路径吗? - Kyasa Madhavi
1
@Kyasa - 这是IIS虚拟应用程序。请参见此处 - http://learn.iis.net/page.aspx/150/understanding-sites-applications-and-virtual-directories-on-iis-7/ - Oded
不错的链接。所以我们可以在链接标签中使用“~”,而无需使用runat=server标记? - Kyasa Madhavi
嗨,Oded。你解释的概念是正确的。但它适用于图像src,而不适用于使用Link标签导入样式表。无法在链接标记中使用波浪号。 - Kyasa Madhavi
显示剩余3条评论

12

第二个不起作用,因为除了服务器端asp.net代码,没有任何东西能够识别它。而且,由于你的链接标签是普通的HTML而不是服务器控件,所以它永远不会被处理。


8
如果在您的链接标签中添加runat="server",那么它将完美地工作...
像这样...
<link href="~/common/black_theme/css/style.css" rel="stylesheet" runat="server"> 

(这也可以工作)


1
这个不起作用。 我尝试了这个解决方案,但是渲染代码使用的是页面文件夹而不是Web应用程序文件夹。例如:<link href="~/CSS/MyStyle.css" rel="StyleSheet" runat="server" /> 结果: http://localhost/AppFolder/OtherFolder/~/CSS/MyStyle.cssCSS文件夹位于AppFolder下。 - Anibal Díaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接