在ASP.NET中使用~使人困惑

在ASP.NET中使用~使人困惑,asp.net,Asp.net,我是第一次在ASP.NET中编程。事实证明这很容易,我真的很享受。我喜欢的一个特性是,在网页中,我可以使用波浪号(~)字符,然后使用路径的其余部分,从根目录引用文件。然而,这似乎并不一致。例如,它在href的上下文中工作,例如 <link href="~/css/StyleSheet.css" /> 它不适用于src,例如 <img src="~/images/header.jpg" /> 为什么会这样?是不是我做错了什么。这种不一致性令人讨厌。根据我的经验,

我是第一次在ASP.NET中编程。事实证明这很容易,我真的很享受。我喜欢的一个特性是,在网页中,我可以使用波浪号(~)字符,然后使用路径的其余部分,从根目录引用文件。然而,这似乎并不一致。例如,它在href的上下文中工作,例如

<link href="~/css/StyleSheet.css" />

它不适用于src,例如

<img src="~/images/header.jpg" />


为什么会这样?是不是我做错了什么。这种不一致性令人讨厌。

根据我的经验,
~
技巧只在服务器控件中有效。如果您的img运行了
runat=“server”
,应该可以修复它。

为了克服这些缺点,, ASP.NET包括Web应用程序 根运算符(~),可以使用 在服务器中指定路径时 控制。ASP.NET解决了以下问题:~ 运算符到当前值的根 应用你可以使用~ 运算符与文件夹一起使用 指定基于路径的路径的步骤 当前根

您可以在任何情况下使用~运算符 服务器中与路径相关的属性 控制。已识别~运算符 仅适用于服务器控件和服务器中的 代码。不能使用~运算符 对于客户端元素


谢谢你的回答。不过,让所有东西都在服务器上运行真的是个好主意吗?在我看来,这似乎会加重服务器的负担。(在任何一种情况下,答案都标记为已接受。)是的,请谨慎使用服务器标记,在任何可以使用html标记的地方(不使用runat=server)都可以使用它。如果您在用户控件中使用html/服务器控件,则不要将样式表包含在用户控件中,而是将它们包含在将使用用户的父页面中control@Jason:不,在服务器上运行所有内容不是一个好主意。ASP.Net确实可以处理大量控件,但它需要解析的控件越少越好。此外,服务器控件可以添加标记或更改标记,当您可以通过.browser文件等控制更改标记时,您可以通过原始HTML获得更多的控制。如果还包括runat=“server”属性,~操作符将同时适用于HTML和服务器控件。在这个意义上,下面被接受的答案并不完全正确。@IrishChieftain-在什么意义上,带有runat=“server”的HTML控件不是服务器控件?!我想说的是,在没有“~”操作符的情况下将runat=“server”添加到HTML控件(从而使其成为服务器控件)可能不起作用。如果我错了,我会改正的:-)啊,我明白了-我以为你是在试图区分运行at=“server”的不同类型的控件,而不是它们是否使用了
~
。我现在明白了:)