2012-04-15 56 views
2

两者都包含相同的文件。两者都有效,但是有没有优势比其他优势更有优势?这些javascript包含的定义是否有区别

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> 

<script type="text/javascript" src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 
+0

我认为“〜/”语法是一个.NET指令,并没有任何好处一个.NET函数调用或带有runat =“server”属性标记之外? – Tommy 2012-04-15 18:11:16

回答

3

在第一种情况的Url.Content相对路径转换为应用绝对路径

在第二种情况下,字符串被认为是文字和输出链路将包含〜/在大多数情况下,它不会工作,因为它会在当前目录下查找名为〜的文件夹。

但在asp.net mvc 4剃须刀的viewengine会看到〜/并自动为你做Url.Content。

http://www.davidhayden.me/blog/asp.net-mvc-4-the-new-tilde-slash-feature-in-razor-2

+1

正确!如果应用程序未在根级别运行(例如在IIS中,不在Cassini或IIS Express中),则需要预MVC2/razor 2,@ U​​rl.Content。正如你所提到的,MVC 4/Razor 2解决了这个问题。 – RickAndMSFT 2012-04-17 17:32:21

+0

很好的答案。 :) – vol7ron 2012-04-17 18:03:48

0

我相信还有更多的工作在第一最小量,因为编译器发现@Url.Content,并调用该函数。

最终结果是一样的,但我认为在第一步中还有2-3个更多的步骤。尽管如此,所有这些都会在[毫微秒]秒内发生。

+0

Pre MVC2/razor 2,@ U​​rl.Content在应用程序未在根级别运行时(例如在IIS中,不在Cassini或IIS Express中运行)时是必需的。剃刀2修复了这个问题。 – RickAndMSFT 2012-04-17 17:31:30

+0

这可能是真的,但它仍然是一个用于插值的服务器指令。 – vol7ron 2012-04-17 18:03:00