【问题标题】:Can I use relative URL to access a page immediately below the current directory?我可以使用相对 URL 访问当前目录下的页面吗?
【发布时间】:2016-12-08 16:47:02
【问题描述】:

我在 Web 表单应用程序中使用 ASP.NET 路由。

假设我有一条路由 produce/fruit 到一个关于水果的页面。

还可以说,我有一条路由 produce/fruit/apples 到一个关于苹果的页面。

所以,produce/fruit 是一个页面和一个目录。我可以使用相对 URL 创建从该页面到 produce/fruit/apples 的超链接,而不必包含当前页面?

如果我在produce/fruit 的页面上使用下面的锚点,它将带我到不存在的produce/apples。但是,如果我在 produce/fruit/ 的同一页面上使用相同的链接,它将带我到正确的页面/子目录。

<a href="apples">apples</a>

当然,我来自produce/fruit 的链接可能是&lt;a href="fruit/apples"&gt;apples&lt;/a&gt;,但我需要包含当前页面名称,而来自produce/fruit/ 的链接将无法使用。

我觉得有一些非常简单的 html 我已经忘记了。

【问题讨论】:

  • 你试过&lt;a href="apples/"&gt;apples&lt;/a&gt;吗?
  • 您尝试了吗&lt;a href="/apples"&gt;apples&lt;/a&gt; - 顺便说一句,produce/fruit 不是页面和目录。 produce/fruit 是一个页面,produce/fruit/ 是一个目录
  • produce/apples/作为目录,但不会将当前目录保留在路径中。
  • &lt;a href="/apples"&gt;apples&lt;/a&gt; 转到/apples,即根目录中不存在的页面。我想你已经确定了为什么这是一个关于路由的问题,因为它是关于基本 html 的问题。如果不涉及路由,我认为这会起作用。
  • 如果是 root 则尝试&lt;a href="./apples"&gt;apples&lt;/a&gt;./ 表示当前目录

标签: html asp.net asp.net-mvc-routing url-routing


【解决方案1】:

问题只是您没有考虑当前 URL 末尾的斜杠(或缺少斜杠)。

例如,如果 URL 是 /produce/fruit 并且您有一个类似 apples 的 href,那么生成的链接将是 /produce/apples。但是,如果 URL 是 produce/fruit/ 且具有相同的 href,则生成的链接将是 /product/fruit/apples。简而言之,您只需要确保始终在 URL 中使用斜杠即可。为此,您可以在 RouteConfig.cs 中启用 routes.AppendTrailingSlash

public static void RegisterRoutes(RouteCollection routes)
{
    routes.AppendTrailingSlash = true;

【讨论】:

  • 我们可能不得不这样做,但我们必须更新站点内容中的所有静态链接。我希望有一种方法可以逐个链接甚至逐个路由地处理它。
  • 如果您不能保证 URL 中的尾部斜杠,则没有万无一失的方法来使用相对 href。不过,FWIW 不一定需要更新所有静态链接。此标志的工作方式是 MVC 将重写 URL 以在末尾包含斜杠。换句话说,如果您单击指向 /produce/fruit 的链接,地址栏中的 URL 将是 /produce/fruit/(带有斜线)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
相关资源
最近更新 更多