对于ASP.NET的路径问题,一直都是云里雾里,没有去详细的理解,今天正好可以梳理一下它们之间的关系和使用方法。而若想明白路径的表示方式的使用方法和区别以及注意事项可以通过下面的几个概念来进一步加深:
绝对路径和相对路径
每个网页都有一个唯一的地址,它就是该网页的绝对路径。绝对路径提供所链接文档的完整URL,而且包括所使用的协议(例如对于网页,通常使用HTTP)。例如上面的第一种写法就是一个绝对路径(虽然是一个不存在的地址)。
必须使用绝对路径才能链接到其他服务器上的文档。尽管对本地链接(即到同一站点内文档的链接)也可以使用绝对路径链接,但不建议采用这种方式,因为一旦将此站点易懂到其他域,则所有本地绝对路径链接都将断开。
当需要在站点内移动文件时,对本地链接使用相对路径还能提供更大的灵活性。
文档相对路径对于大多数Web站点的本地连接来说,是最适用的路径。在当前文档与所链接的文档处于同一文件夹内,而且可能保持这种状态的情况下,文档相对路径特别有用。文档相对路径还可用来链接到其他文件夹中的文档,方法是利用文件夹层次结构,制定从当前文档到所链接的文档的路径。
文档相对路径的基本思想是省略掉对于当前文档和所链接的文档都相同的绝对URL部分,而只是提供不同的路径部分。例如,假设一个文档集合的结构如图所示:
如果要创建从booklist1.html到其他文件的链接,应注意以下问题:
① 若要从booklist1.html连接到booklist2.html(两个文件在同一文件夹中),文件名就是相对路径:booklist2.html。
② 若要链接到book001.html,(在booksDetail的子文件夹内)可使用相对路径:booksDetail/book001.html。
每个正斜杠(/)表示在文件夹层次结构中下移一级。
③ 若要链接到main.html(在父文件夹中,booklist1.html向上一级),可使用相对路径: ../main.html。
每个../表示在文件夹层次结构中上移一级。
④ 若要链接到index.html(在父父文件夹中,booklist1.html向上两级),可使用相对路径: ../../index.html。
⑤ 若要链接到header.html(在父父文件夹的其他子文件夹中),可使用相对路径: ../../shared/header.html。
其中../../向上移至父父文件夹;shared/向下移至shared文件夹中。
若要成组地移动一组文件,例如移动整个文件夹时,该文件夹内所有文件保持彼此间的相对路径不变,此时不需要更新这些文件间的文档相对链接。但是,当移动含有文档相对链接的单个文件或者移动文档相对链接所连接到的单个文件时,则必须更新这些链接。
本地链接和服务器链接
由于HTML网页是被传递到客户端计算机上运行,所以要特别注意链接路径。因为既可以链接到客户端计算机上的资源,也可以连接到网络服务器上的资源。例如,当位于服务器上的某个网页想链接到服务器上的另一个资源,假设该资源是 c:/test/root/form.html,位于服务器上。那么可以这样定义链接:
- <span style="font-size:14px;"> <a href="协议名://主机名/form.html">绝对地址链接到form</a>
- <a href="相对路径/form.html">相对地址链接到form</a></span>
而不能这样:
- <span style="font-size:14px;"><a href="file://c:/test/root/form.html">链接到form</a></span>
当该网站的访问者单击该链接时,浏览器将尝试访问其各自计算机上的file://c:/test/root/form.html,通常会看到错误消息。这样做实际是将链接指向本地计算机上的一个文件,而不是服务器上的一个文件,因为最终被传送到本地计算机上运行。
综上,在传统Web开发中一共有四种路径表示方式(下面以图片路径为例):
- 直接以URL表示,如:
- <span style="font-size:14px;"><img src="http://</span><a target="_blank" href="http://www.Test.com/images/cat.jpg'/"><span style="font-size:14px;">www.Test.com/images/cat.jpg"/</span></a><span style="font-size:14px;">></span>
- 以相对于当前网页的形式表示,如:
- <span style="font-size:14px;"><img src="images/cat.jpg"/>
- </span>
- 以相对于网站根路径的方式表示,用于客户端,如:
- <span style="font-size:14px;"><img src="/images/cat.jpg"/>
- </span>
- 以当前页面路径对等的路径形式表示,如:
- <span style="font-size:14px;"><img src="../images/cat.jpg"/>
- </span>
在ASP.NET中还有一种只能用于服务器控件上或者服务器代码里的表示形式,那就是“~”路径表示符,它的功能是无论页面位于网站中的什么位置,都将从位于 Web 应用程序根目录下的 images 文件夹中直接读取图像文件。如:
- <span style="font-size:14px;"><asp:Image ID="Image1" runat="server" ImageUrl="~/images/cat.jpg" /></span>