Asp.net mvc 4 使用@Url.Content(";~";)有好处吗

Asp.net mvc 4 使用@Url.Content(";~";)有好处吗,asp.net-mvc-4,razor,razor-2,Asp.net Mvc 4,Razor,Razor 2,我是MVC4/razor2新手,我想我了解使用@Url.Content和@Url.Action的一般好处-如果我的路由或虚拟目录发生更改,神奇的Url字符串将正确呈现 我正在查看一些带有razor代码的遗留Javascript,视图中添加了'@Url.Content(“~”)。这将显示为'/'-或网站根目录。哪个。。。。永远都是这样,不是吗 或者,在某些情况下,这可能会有不同的表现 注意:它不是~/——只是普通的平铺 我计划提取razor对helper函数的调用,并将JavaScript的主块

我是MVC4/razor2新手,我想我了解使用
@Url.Content
@Url.Action
的一般好处-如果我的路由或虚拟目录发生更改,神奇的Url字符串将正确呈现

我正在查看一些带有razor代码的遗留Javascript,视图中添加了
'@Url.Content(“~”)
。这将显示为
'/'
-或网站根目录。哪个。。。。永远都是这样,不是吗

或者,在某些情况下,这可能会有不同的表现

注意:它不是
~/
——只是普通的平铺



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

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

从这篇文章中:

绝对虚拟路径以文本斜杠(/)开头。A. 相对虚拟路径相对于应用程序根目录, 如果它只是一个波浪号(~),或者以波浪号和双精度开头 反斜杠(~\)或波浪号和斜杠(~/)。制作虚拟 相对路径使路径独立于应用程序


从MVC4 Url开始。将波浪线转换为应用程序根不需要内容:

似乎有两个独立的问题,因此我将分别解决它们

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

到目前为止,几乎没有理由使用它

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



其次

什么是潮流


如果你的web应用程序不是你网站的根,那么它很重要。@MikeCheel-这就是~/的作用,不是吗?tilde本身和tilde slash是一样的吗?tilde的意思是应用程序的根而不是网站的根,所以在很多情况下,如果它们是相同的,那么使用Url.Content就没有什么区别了。好吧,我(现在)知道应用程序根可以不同于网站根[现在这不是我的特殊情况,但这就是Url.Content的用途,不是吗],但我认为tilde slash是应用程序根。tilde也是应用程序根吗?不是这样吗?tilde slash和tilde本身有区别吗?这是我找不到的文档。只是tilde。我确实遇到过一篇帖子,说在MVC 4中使用Razor时不再需要UrlContent,如果Razor看到~它将相应地调整url。您发布的链接,以及我看到的其他链接,似乎都表明该url。只有在“~”时才不需要内容前缀为href=或src=,情况并非总是如此。在我的特殊情况下,它是对象中的Url,看起来就像魔术字符串。不确定razor如何找到所有这些情况。Url。内容也没有标记为不推荐,请记住我们谈论的是哪一边。波浪线是服务器端。浏览器不知道因此客户端URL需要以不同的方式生成。这并不意味着您仍然不能将其用于javascript。是的。服务器端。一大堆javascript[4000行。yaaay]推到一个视图中。我正在提取razor命令,以便将JS放入一个独立的文件中。代码看起来像url:“@url.Content(“~”),我所做的是将其编写为一个jquery插件(您可以在单独的文件中编写您的内容,jquery内容不是必需的)我只需要将我的东西作为参数传入,然后我就有了一个局部视图,可以将服务器生成的东西作为参数插入到对象中(在本例中是jquery插件)因此,我的大部分逻辑都在一个单独的js文件中,我只使用razor生成参数。是的,这就是为什么我要提取razor命令,以便将js放入一个独立的文件中。但是看起来像url的代码:'@url.Content(“~”)不能被url替换:“~”-现在它是razor忽略的一个神奇字符串;Url.Content只能在href=和src=Erik的相对路径的情况下免除,正如我在其他评论中指出的,Url.Content只能在href=和src=(可能还有其他一些)的情况下免除。
<a href="@Url.Content("~")">Root</a>
<a href="~">Root</a>