ASP.NET / IIS上的相对路径和绝对路径

时间:2011-10-06 12:15:51

标签: asp.net iis path

我读过很多关于相对/绝对路径的文章,但我仍然无法解决这个问题。

以下代码来自我的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项目的根目录?

4 个答案:

答案 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应用程序中“路径”的完整概念。