我读过很多关于相对/绝对路径的文章,但我仍然无法解决这个问题。
以下代码来自我的ASP.NET Master
页面:
<li><a>Reports</a>
<ul>
<li>
<a href="/Reports/One.aspx">One</a>
</li>
<li>
<a href="~/Reports/Two.aspx">Two</a>
</li>
</ul>
</li>
(请注意,一个链接有一个~
而一个链接没有。)
运行网站时,第一个链接指向http://server/Reports/One.aspx
,第二个链接指向http://server/company/project/Reports/~/Reports/Two.aspx
。
如何在不忽略IIS上设置的虚拟目录的情况下访问ASP.NET项目的根目录?
答案 0 :(得分:13)
将runat="server"
属性添加到锚标记。您不能将~root运算符与HTML标记一起使用。只有服务器控件(Html或Web)才能使用它。
<a runat="server" href="~/Reports/Two.aspx">Two</a>
答案 1 :(得分:12)
如果您不希望它们成为具有生成ID的服务器控件,请对所有文件使用Page.ResovleUrl
:
<a href='<%= Page.ResolveUrl("~/Reports/Two.aspx")%>'>Two</a>
答案 2 :(得分:6)
相对路径是相对于当前资源的,因此如果您正在查看
http://yourhost/app/default.aspx
reports/one.aspx
的相对路径为http://yourhost/app/reports/one.aspx
。请注意相对路径中缺少前导/
。这就是它相对的原因。
正如您可能猜到的那样,绝对路径以/
开头,它使用当前资源的主机名,因此http://yourhost/reports/one.aspx
。
〜是一只红鲱鱼。这是一个.NET - 仅用于ASP.NET的各个部分,以使您的路径脱离当前应用程序根目录。因此,如果您的应用程序根目录是http://yourhost/app
,那么您正在查看http://yourhost/app/views/default.aspx
,并且您向.NET询问了路径~/reports/one.aspx', you would be given
http://yourhost/app/reports/one.aspx`。
〜不被HTML,IIS或URL使用,因此如果您的浏览器看到它,它就会按原样使用它。
注意:某些Unix服务器可以使用~
映射到用户的主目录中,但这只会让事情变得复杂。
答案 3 :(得分:1)
请阅读 There is something about "Paths" for ASP.NET beginners 。它将给出ASP.NET应用程序中“路径”的完整概念。