我是MVC4 / razor2的新手,我认为了解使用@Url.Content
和@Url.Action
的一般好处 - 如果我的路由或虚拟目录发生更改,则会正确呈现magic-url-strings。
我正在查看带有'@Url.Content("~")'
的视图中的一些遗留Javascript-with-razor代码。这将呈现为'/'
- 或网站根目录。哪个......总是如此,不是吗?
或者是否存在某些可能以不同方式呈现的情况?
注意:它是不 ~/
- 只是普通的直径。
我正在计划提取对辅助函数的剃刀调用,并将JavaScript的主要块移动到外部文件中(用于linting和一般的“清洁度”)。我不需要“修复”当前发生的任何事情,但我想更好地理解它。
答案 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)