2012-04-15 5 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 = «сервер» атрибут? – Tommy

ответ

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

Правильно! Pre MVC2/razor 2, @ Url.Content требовалось, когда приложение не запускалось на корневом уровне (например, в IIS, а не в Cassini или IIS Express). Как вы упомянули, MVC 4/Razor 2 исправляет это. – RickAndMSFT

+0

Хороший ответ. :) – vol7ron

0

Я считаю, что минимальное количество дополнительной работы в первом, так как компилятор находит @Url.Content и вызывает эту функцию.

Конечный результат такой же, но я думаю, что в первом есть еще 2-3 шага. Тем не менее, все это произойдет в [миллинано] секундах.

+0

Pre MVC2/razor 2, @ Url.Content требуется, когда приложение не запускалось на корневом уровне (например, в IIS, а не в Cassini или IIS Express). Razor 2 исправляет это. – RickAndMSFT

+0

Это может быть правдой, но это все еще директива сервера, используемая для интерполяции. – vol7ron

Смежные вопросы