ASP.NET 相对路径

21

我对ASP.NET的相对路径感到困惑,请有人能帮忙吗?

在主页面中,我提供了一个引用链接标签:

<a href="~/Account/Login.aspx">Login</a>

根据ASP.NET官方文档,我了解到:

以下示例展示了~运算符用于指定基于根的路径,用于使用Image服务器控件时的图像。在此示例中,图像文件从位于Web应用程序根目录直接下面的Images文件夹中读取,无论页面在Web站点中的位置如何。

<asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" />

当我从/Account文件夹中的页面单击链接时,使用Login标记,我将被重定向到:

/Account/~/Account/Login.aspx

为什么?为什么?h

3个回答

35
因为你直接在标记中使用它,而不是在服务器控件中使用。只需使用以下简单代码即可解决问题:
<a runat="server" href="~/Account/Login.aspx">Login</a>

基本上,~路径引用需要在服务器上进行翻译,因为它是对应于应用程序基目录的服务器路径的引用。纯HTML标记不会在服务器上处理,它只是原样传递给客户端。只有经过服务器处理的代码才能将~路径转换为其所解析的内容。


9
"Or: <a href="<%= ResolveClientUrl("~/Account/Login.aspx") %>">登录</a> 应该会得到相同的结果。" - Joe Enos
没错,这也可以。使用<asp:Hyperlink>控件也可以。根据开发人员想要使用的内容,有许多不同的方法。 - David
谢谢David和Jamie。祝你们新年快乐。 - Didier Levy
你好,是否有其他方法进行导航?我已经尝试了以下三种方式:<asp:HyperLink ID="HyperLink1" NavigateUrl="~/Setup/Company.aspx" runat="server">HyperLink</asp:HyperLink><a runat="server" href="~/Setup/Company.aspx">Company</a> <li><a runat="server" href="~/Setup/Company.aspx"><i class="fa fa-cloud"></i>Company</a></li>但是这三种方式都会显示相同的错误信息“Cannot use a leading .. to exit above the top directory.”我的主页面在根目录。 - Muhammad Ali
@MuhammadAli:请在此页面使用“提问”按钮,在Stack Overflow上提出新问题。确保在问题中提供有关该问题的任何相关信息。在不同现有问题的评论线程中寻求社区帮助并不是一个好的选择。 - David

7

使用这个命令

<a href="<%=Page.ResolveUrl("~/product.aspx")%>" >Link To Products</a>

0

在 ASP.NET 服务器控件内引用 URL 时,可以使用 ~ 符号。 你将其用在了一个 <a> 标签里,这是普通的 HTML,不知道 ~ 符号。请改为使用 '"/Images/SampleImage.jpg"'。


1
我不喜欢在页面中使用根目录“/”的原因是它可能会因环境而异。例如,如果您的应用程序在XP开发环境中的虚拟目录中,在Server03的生产服务器上则位于Web根目录中,则会得到不同的结果。 - Joe Enos
1
"/Images/SampleImage.jpg" 不是相对路径。这种方法只有在应用程序的基本路径与服务器根路径相对应时才有效。虽然通常情况下是这样,但并不保证,并且实际上也不是所要求的。 - David
你说得对。虽然那是我的简单答案,但其他人已经发布了更好的ResolveClientUrl。 - Carlos Muñoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接