使用@ Url.Content是否有好处("〜")

时间:2014-09-02 13:54:41

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

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

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

或者是否存在某些可能以不同方式呈现的情况?

注意:它是 ~/ - 只是普通的直径。


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

2 个答案:

答案 0 :(得分:10)

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

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

  

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

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

答案 1 :(得分:2)

似乎有两个单独的问题,因此我将逐个解决这些问题。

  

使用@ Url.Content()

是否有好处

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

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

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

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

其次

  

什么是〜(tidle)

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