【问题标题】:Is there a benefit to using @Url.Content("~")使用 @Url.Content("~") 有什么好处吗
【发布时间】:2014-10-26 19:45:34
【问题描述】:

我是 MVC4/razor2 的新手,我认为了解使用 @Url.Content@Url.Action 的一般好处 - 如果我的路由或虚拟目录发生更改,magic-url-strings 会正确呈现。

我正在查看一些带有 '@Url.Content("~")' 的旧 Javascript-with-razor 代码在视图中。这呈现为'/' - 或网站根目录。哪个....总是这样,不是吗?

或者在某些情况下可以以不同的方式呈现?

注意:它不是 ~/ - 只是普通的波浪号。


我计划提取对辅助函数的 razor 调用,并将 JavaScript 的主要块移动到外部文件中(用于 linting 和一般“清洁”)。我不需要“修复”当前发生的任何事情,但我想更好地理解它。

【问题讨论】:

  • 如果您的网络应用不是您网站的根目录,这很重要。
  • @MikeCheel - 这就是 ~/ 的用途,不是吗? tilde-by-itself 和 tilde-slash 一样吗?
  • 波浪号表示您的应用程序的根目录而不是网站的根目录,因此在许多情况下,当它们相同时,如果您使用 Url.Content,则不会有任何区别。
  • 好吧,我确实(现在)知道应用程序根目录可能与网站根目录不同[现在不是我的特殊情况,但这就是 Url.Content 的用途,不是吗] ,但我认为波浪线是应用程序根。波浪号也是应用程序根吗?不是这样吗?波浪线斜线和波浪线本身有区别吗?这是我找不到记录的内容。
  • 只是波浪号。我确实遇到过一篇文章,但它说在使用 Razor 时,MVC 4 中不再需要 UrlContent,如果 Razor 看到 ~ 它将相应地调整 url。 beletsky.net/2012/04/new-in-aspnet-mvc4-razor-changes.html

标签: asp.net-mvc-4 razor razor-2


【解决方案1】:

似乎有两个不同的问题,所以我将分别解决它们。

使用@Url.Content() 有什么好处

截至Razor 2,几乎没有理由使用它。

以下是等效的(对于任何应用程序根):

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

<a href="~">Root</a>

其次

什么是~(标题)

slash(/) vs tilde slash (~/) in style sheet path in asp.net

【讨论】:

  • Erik,正如我在其他 cmets 中指出的那样,Url.Content 只能在 href= 和 src= 的情况下省略(可能还有其他一些情况)。
【解决方案2】:

Url.Content 将波浪号映射到应用程序根目录。应用程序根与网站根不同。

来自这篇文章http://msdn.microsoft.com/en-us/library/system.web.virtualpathutility(v=vs.110).aspx

绝对虚拟路径以文字斜杠 (/) 开头。一种 相对虚拟路径是相对于应用程序根目录的, 如果它只是一个波浪号 (~) 或以波浪号和一个 double 开头 反斜杠 (~\) 或波浪号和斜杠 (~/)。制作一个虚拟 path relative 使路径独立于应用程序。

从 MVC4 开始,不需要将 Url.Content 转换为应用程序根:http://beletsky.net/2012/04/new-in-aspnet-mvc4-razor-changes.html

【讨论】:

  • 您发布的链接以及我见过的其他链接似乎表明 Url.Content 仅当“~”以 href= 或 src= 为前缀时才需要,这并不总是案子。在我的特殊情况下,它是对象中的 url,看起来就像魔术字符串。不确定剃须刀如何找到所有这些案例。 Url.Content 在msdn.microsoft.com/en-us/library/… 也未标记为已弃用
  • 记住我们正在谈论的栅栏的哪一边。波浪号是服务器端。浏览器对此一无所知,因此需要以不同方式生成客户端 url。这并不意味着您仍然不能将它用于 javascript。
  • 是的。服务器端。一大堆 javascript [4000 行。 yaaay] 挤进一个视野。我正在提取剃须刀命令,以便可以将 JS 放入独立文件中。代码看起来像 url: '@Url.Content("~")',
  • 我所做的就是把它写成一个jquery插件(你可以把你的东西写在一个单独的文件中,jquery的东西不是必需的)我只需要把我的东西作为参数传递.然后我有一个部分视图,我将服务器生成的东西作为参数插入到对象(在本例中为 jquery 插件),所以我的大部分逻辑都在一个单独的 js 文件中,我只使用 razor 生成参数。
  • 是的,这就是为什么我正在努力提取剃须刀命令,以便我可以将 JS 放入一个独立文件中。但是看起来像 url: '@Url.Content("~")' 的代码不能被 url: "~" 替换——它现在是一个 razor 忽略的魔法字符串; Url.Content 只能在 href= 和 src= 的相对路径的情况下省略
猜你喜欢
  • 2011-04-24
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 2012-02-11
  • 2012-07-17
相关资源
最近更新 更多