2012-04-15 3 views
2

Les deux incluent les mêmes fichiers. Les deux œuvres, mais y a-t-il un avantage à favoriser l'un par rapport à l'autre?Y at-il une différence entre ces définitions d'inclusion 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

Je pensais que le « ~/» syntaxe est une directive .NET et ne sert à rien en dehors d'un appel de fonction .NET ou un tag avec le runat = « server » attribut? – Tommy

Répondre

3

Dans le premier cas, le Url.Content convertit un chemin relatif à une application de chemin absolu

Dans le second cas, la chaîne est considérée comme un lien littéral et contiendra les émis ~ /. Ce qui, dans la plupart des cas, ne fonctionnerait pas car il recherchera un dossier nommé ~ dans le répertoire courant.

Mais dans asp.net mvc 4 le viewengine du rasoir verra le ~/et fera le Url.Content pour vous automatiquement.

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

+1

Correct! Pre MVC2/rasoir 2, @ Url.Content était requis lorsque l'application ne s'exécutait pas au niveau racine (par exemple dans IIS, pas dans Cassini ou IIS Express). Comme vous le mentionnez, MVC 4/Razor 2 corrige ceci. – RickAndMSFT

+0

Bonne réponse. :) – vol7ron

0

Je crois qu'il ya une quantité minimale de plus de travail dans la première, parce que le compilateur trouve @Url.Content et appelle cette fonction.

Le résultat final est le même, mais je pense qu'il y a 2-3 étapes de plus dans le premier. Tout cela arrivera en [milli-nano] secondes, cependant.

+0

Pré MVC2/rasoir 2, @ Url.Content était requis lorsque l'application ne s'exécutait pas au niveau racine (par exemple dans IIS, pas dans Cassini ou IIS Express). Razor 2 corrige ceci. – RickAndMSFT

+0

Cela peut être le cas, mais il s'agit toujours d'une directive de serveur utilisée pour l'interpolation. – vol7ron

Questions connexes