2014-01-16 2 views
3

В моем Layout.cshtml файле у меня есть следующие строки:Почему MVC автоматически расширяет виртуальные URL-адреса?

<link rel="stylesheet" href="~/Content/bootstrap.css" /> 

Мое предположение было то, что, так как я не включил Url.Content() вызов, он будет на самом деле просто делают то, что я написал, а не расширить виртуальный URL автоматически. Это предположение неверно - созданный HTML содержит правильный путь к файлу, а не виртуальный путь, который я ввел.

Если я обернуть <link> в <script>

<script type="text/html"> 
    <link rel="stylesheet" href="~/Content/bootstrap.css" /> 
</script> 

то URL не расширяется.

Какая часть ASP.NET MVC выполняет этот автоматический анализ HTML и есть ли способ контролировать его?

+4

Когда вы когда-либо хотите URL, начинающийся с '~ /'? – CodeCaster

ответ

3

Это была новая функция, включенная в Razor2 и ASP.NET MVC 4, и была разработана, чтобы облегчить жизнь, не имея необходимости использовать Url.Content везде.

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

Функция работает только внутри стандартных HTML атрибуты, и именно поэтому вы не получите его внутри тега <script> или где-либо еще.

Вы можете использовать простой выход записи, чтобы обойти это:

<link rel="stylesheet" href="@("~/Content/bootstrap.css")" /> 
+0

Есть ли еще документация по этой обработке? Например, это объясняет, почему он не заменяет его в теге '

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