Пътищата с наклонена черта в тилда не работят в MVC 4

Както разбрах it, обикновеният стар път "~/foo" трябва да работи като @Url.Content("~/") в MVC 4. Въпреки това се опитвам да направя това и получавам много счупени пътища - - тилдата все още е там, когато HTML се извежда.

Така че, например, имам този път в /Views/Shared/_Layout.cshtml:

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

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

<link href="/bg~/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" />

Горният проблем накара Razor да игнорира тилдата (~), давайки го на браузъра такъв, какъвто е/нетрансформиран. Отне ми цяла вечност да открия проблема, който в крайна сметка открих, като преместих img тага в горната част на файла и открих, че работи добре там, и след това използвах подход разделяй и владей, за да стесня мястото в *.cshtml файл, където е спрял да работи.

Надявам се тази публикация да спести време на някого!

person Barumpus    schedule 09.10.2019

Проблемът е за href=, а не за кой < tag >
Примери:

< img src="@Url.Content("Images/someImage.jpg")"/>
< a href="/[email protected]("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

Това, което реши това за мен, беше изключването на Meleze.web HTML Minification.

person Mark    schedule 06.09.2013