在WinForm中当前路径为.\, 上级目录为..\, 根目录为\.
而在web中/表示根目录,./表示当前目录,../表示上级目录。
在asp.net中用~表示虚拟路径,是asp.net中的一种标识,表示从应用根目录开始的位置。
如我们将一个应用程序部署到http://localhost:8080/Sorce这个目录下,应用的根目录(即webapplication)是http://localhost:8080/,即~/imgs/default.htm相当于完整的目录为http://localhost:8080/imgs/default.htm.
而网站(新建website)的根目录为:http://localhost:8080/Source,如~/imgs/default.htm就相当于http://localhost:8080/Source/imgs/default.htm.
实例:
我们分别建立WebApplication和WebSite,它们的目录如下:
都为它们建立一个默认页,里面放置一个连接用来打开1.jpg.两个网页的代码是一样的,如下图:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> <a href="/a/b/imgs/1.jpg">连接</a> </div> </form> </body> </html>
然后分别运行,并把鼠标话在“连接”上面,在浏览器的状栏下可以看到网站的绝对路径:
在WebApplication上显示为:
在WebSite上显示为:
因此可以看出对于WebApplication,是对于网站为根目录,而对了webSite是以它的路径为根目录。
浏览器并不认识~,是asp.net会把它转成相对于网站根目录的全路径再传给浏览器。
- 如果在服务端控件中(使用runat=server)会自动将~进行转换,如果在HTML控件或者需要在代码中转换的话可以使用VirtualPathUtility类中静态方法进行虚拟路径、全路径等的转换,比如VirtualPathUtility.ToAbsolute(“~/imgs/default.aspx“”)就是将虚拟路径转换为相对网站根的全路径,即/website/imgs/default.aspx
- VirtualPathUtility类主要方法:string AppendTrailingSlash(string VirtualPath):如果VirtualPath最后没有'/'则添加。string Combine(string basePath,string relativePath),将两个路径合并,返回虚拟路径的目录部分;string MakeRelative(string fromPath,string toPath):计算两个虚拟路径的相对路径;ToAbsolute,转换为绝对路径