2014-09-02 87 views
4

我是MVC4/razor2的新手,我想明白使用@Url.Content@Url.Action的一般益处 - 如果我的路由或虚拟目录发生变化, url字符串被正确呈现。使用@ Url.Content有没有好处(“〜”)

我正在寻找一些遗留的Javascript与剃刀代码在视图是与'@Url.Content("~")'胡椒粉。这呈现为'/' - 或者网站根目录。哪一个......总是如此,不是吗?

或者是否存在某种情况下可能呈现不同的情况?

注:这是不是~/ - 只是简单的醇”波浪。


我打算提取剃刀调用帮助的功能,和移动的JavaScript的主块到外部文件(掉毛和一般的“清洁”)。我不需要“修复”目前发生的任何事情,但我想更好地理解它。

+1

如果您的网络应用程序不是您网站的根目录,那么它很重要。 – 2014-09-02 13:57:39

+0

@MikeCheel - 这就是〜/是的,不是吗?本身与波浪线斜线相同吗? – 2014-09-03 17:26:34

+0

代字号意味着您的应用程序的根目录不是网站的根目录,所以在许多情况下,当它们相同时,如果您使用Url.Content,它将不会产生影响。 – 2014-09-03 17:27:21

回答

10

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

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

绝对虚拟路径与文字斜杠(/)开始。如果它只是一个代字符(〜)或者以代字号和双反号(〜\)或代字号和斜线标记(〜/)开头,则相对虚拟路径与应用程序根目录相关,即 。制作虚拟的 路径使得路径独立于应用程序。

由于MVC4 Url.Content的不需要的波浪线转换为应用程序了根:http://beletsky.net/2012/04/new-in-aspnet-mvc4-razor-changes.html

+1

您发布的链接以及我见过的其他链接似乎表明Url.Content仅在“〜”前缀为href =或src =,但情况并非总是如此。在我的特殊情况下,它是一个对象的url,它看起来像魔术字符串。不知道剃刀是如何找到所有这些情况的。 Url.Content也未在http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.content%28v=vs.118%29.aspx – 2014-09-03 17:44:00

+0

上标记为已弃用我们正在谈论的围栏。代字号是服务器端。浏览器不知道它,所以客户端URL将需要以不同的方式生成。这并不意味着你仍然不能使用它的JavaScript。 – 2014-09-03 17:45:27

+0

是的。服务器端。一大堆javascript [4000行。 yaaay]推进一个视图。我正在提取剃须刀命令,以便将JS放入独立文件中。代码看起来像url:'@ Url.Content(“〜”)', – 2014-09-03 17:48:58

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

+1

Erik,正如我在其他人指出的那样评论,Url.Content只能在href =和src =(以及其他可能)的情况下放弃。 – 2014-09-03 18:01:43