Пути с косой чертой тильды не работают в MVC 4

Как я понимаю это, обычный путь "~/foo" должен работать как @Url.Content("~/") в MVC 4. Однако я пытаюсь сделать это и получаю много неработающих путей - - тильда все еще присутствует при выводе HTML.

Так, например, у меня есть этот путь в /Views/Shared/_Layout.cshtml:

<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />

И доставленный HTML выглядит так:

<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />

Я почти уверен, что у меня это тоже работает как проект MVC 4. Следующие вещи в web.config:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>

... и на данный момент я не уверен, что искать дальше. Какие-либо предложения?


person Josh Schultz    schedule 01.06.2012    source источник
comment
Похоже, вы все еще используете Razor 1, не Razor 2   -  person SliverNinja - MSFT    schedule 01.06.2012
comment
Можете ли вы попробовать создать интернет-приложение MVC 4 и попробовать эту функцию? Возможно, вы не используете Razor 2, как упоминал @SilverNinja, если вы только что изменили ссылку на MVC 4.   -  person Mert Akcakaya    schedule 01.06.2012
comment
Я попытался создать новое приложение MVC 4, и эта функция все еще не работает. Собираюсь попробовать переустановить MVC 4.   -  person Josh Schultz    schedule 01.06.2012


Ответы (8)


Это может быть результатом ошибки в Razor V2, когда апостроф/одинарная кавычка в комментарии HTML нарушает разрешение ~ путей.

Обходной путь — использовать комментарии Razor вместо комментариев HTML. То есть заменить <!-- Here's your comment--> на @* Here's your comment *@.

Извините, это длинный план, так как я понятия не имею, есть ли у вас HTML-комментарии, не говоря уже о тех, которые содержат одинарные кавычки.

person Richard Fawcett    schedule 25.07.2013
comment
Я просто тоже зациклился на этом. На странице, над которой я работал, был html-комментарий с синглом. Удаление или добавление секунды к комментарию устраняет проблему. - person Daniel Auger; 30.12.2013
comment
Это было моей причиной: ---› Лишняя черточка при закрытии комментария вверху страницы. - person brianc; 01.03.2016

Я предполагаю, что вы все еще используете Razor 1 (MvcWebRazorHostFactory — это ‹ 4.0).

Убедитесь, что файл web.config в папке Views выглядит следующим образом...

 <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
person SliverNinja - MSFT    schedule 01.06.2012
comment
Если вы используете MVC 4, вы сможете получить связывание ресурсов работает. Можете ли вы попробовать связать свой CSS? - person SliverNinja - MSFT; 01.06.2012

У меня была эта проблема, когда я вырезал и вставлял пример кода в представление. Оказалось, у меня был неправильный тип тильды!

@{
Layout = "∼/Views/_BasicLayout.cshtml";
}

vs

@{
Layout = "~/Views/_BasicLayout.cshtml";
}

Чуть другой - дерьмо, чтобы найти

person AndyWarby    schedule 27.01.2015

Переустановка MVC 4 (RC) с помощью автономного установщика здесь решил эту проблему для меня. Я до сих пор не понимаю, что вызвало проблему, но я могу жить с этим.

person Josh Schultz    schedule 01.06.2012

Для меня проблема была связана только с типами изображений SVG. Решил это, добавив следующее в файл web.config проекта (не web.config, используемый представлениями, MVC4).

<configuration>
   <system.webServer>
      <staticContent>
         <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      </staticContent>
   </system.webServer>
</configuration>
person Aaron    schedule 31.03.2014

Для MVC 5 и Razor 3 проблема для меня оказалась в лишнем символе кавычек в html-элементе, который стоял перед (задолго до!) тегом img:

<div class="foo""> <!-- note the extra quote character here ugh -->
...
</div>
...
<img src="~/images/an-image.png" />

Вышеупомянутая проблема заставила бритву игнорировать тильду (~), передавая ее браузеру как есть / без преобразования. Мне потребовалась целая вечность, чтобы найти проблему, которую я в конце концов нашел, переместив тег img в начало файла и обнаружив, что он там работает нормально, а затем применив подход «разделяй и властвуй», чтобы сузить место в *.cshtml файл, в котором он перестал работать.

Я надеюсь, что этот пост сэкономит кому-то время!

person Barumpus    schedule 09.10.2019

Вопрос касается href=, а не < tag >
Примеры:

< img src="@Url.Content("Images/someImage.jpg")"/>
< a href="@Url.Content("Home/About")" >click here< /a>

Можно вкладывать @ в другие @section {}

person Peter Darvas    schedule 05.10.2012
comment
Понижение могло быть связано с тем, что этот синтаксис больше не требуется. Дэвидхайден. я/блог/ - person Scott Munro; 14.03.2013
comment
Скотт прав, но технически решение Питера все равно будет работать, если вы случайно окажетесь на Razor 1. Однако лучше просто установить Razor 2. ;) - person Samantha Branham; 16.03.2013

Для меня это решило отключение Minification HTML на Meleze.web.

person Mark    schedule 06.09.2013