【问题标题】:MVC: Simplest way to create a link to the application base URL?MVC:创建指向应用程序基本 URL 的链接的最简单方法?
【发布时间】:2012-06-10 16:24:13
【问题描述】:

我有一个页面,我想在其中包含一个“主页”链接,该链接将我带到我的应用程序的基本 URL。到目前为止,我设法实现这一目标的最简单方法是通过以下 Razor 代码行,但它并不漂亮,我对此也不是非常有信心:

@Html.RouteLink(MyResources.HomeLinkLabel, new { controller = "" })

请注意,如果我不包含 controller = "",那么它生成的超链接会将我带到当前页面,而不是我的基本 URL。

我觉得我遗漏了一些明显的东西......这样做的正确方法是什么?

【问题讨论】:

  • 空控制器起作用的原因是因为 RouteLink 使用指定的路由,默认值通常是 HomeController.Index 方法,这就是它起作用的原因。只要您没有另一个优先的路由,您就可以确信它会返回正确的 url(这意味着任何未在 url 中指定特定控制器/home 的东西无论如何都会去那里)

标签: asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-routing


【解决方案1】:

您可以使用以下代码获取根 URL

Url.Content("~/");

服务器端~/ 语法引用您的应用程序的根目录(这意味着如果您的应用程序在 IIS 的虚拟路径中注册,它将考虑在内)。

【讨论】:

  • 同意这一点。或者,如果您总是想通过控制器/动作引用它,您可以使用 @Html.ActionLink("Home", "Index", "Home")
【解决方案2】:

如果您想执行特定操作,您可以只包含控制器名称和您想要执行的操作:

@Html.RouteLink(MyResources.HomeLinkLabel, new { controller = "Home", action = "Index" })

现在,如果你想去根目录,你可以放类似

<a href="@Url.Content("~/")">...</a>

【讨论】:

  • 请注意,上面的 &lt;a&gt; 标记是错误的,因为如果应用程序基础 url 是虚拟路径,那么 / 会将您带到站点的根目录而不是应用程序基础 url .
  • 谢谢!我想避免指定控制器和操作,所以 Url.Content 是完美的。我接受了@maricind 的回复,因为它简短而中肯,但为你的回复 +1 了。
【解决方案3】:

你也可以只写普通的 HTML:

<a href="/">@MyResources.HomeLinkLabel</a>

【讨论】:

  • 这与虚拟目录不兼容,因为/ 是相对于主机的。如果您的应用程序位于虚拟目录中,则该链接会将您带到根站点而不是应用程序的根目录。
猜你喜欢
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 2012-08-10
相关资源
最近更新 更多