2012-06-01 10 views
9

Come I understand it, un percorso ol "" ~/foo "normale dovrebbe funzionare come @ Url.Content (" ~/") in MVC 4. Tuttavia, sto provando a fai questo e ottieni molti percorsi spezzati: la tilde è ancora lì quando viene prodotto l'HTML.Tilde Slash Paths non funziona in MVC 4

Così, per esempio, ho questo percorso nel /Views/Shared/_Layout.cshtml:

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

E l'HTML consegnati simile a questo:

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

Sono abbastanza sicuro Ho questo in esecuzione anche come progetto MVC 4. La roba successivo nel 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> 

... ea questo punto, non sono sicuro che cosa cercare per il prossimo. Eventuali suggerimenti?

+1

Sembra che si sta ancora utilizzando Razor 1, [non Razor 2] (http://stackoverflow.com/a/ 10194146/175679) – SliverNinja

+0

Puoi provare a creare un'applicazione Internet MVC 4 e provare questa funzione? Forse non stai usando Razor 2 come @SilverNinja ha anche menzionato se hai appena cambiato il riferimento a MVC 4. –

+1

Ho provato a creare una nuova applicazione MVC 4 e la funzionalità non riesce ancora. Provare a reinstallare MVC 4. –

risposta

4

reinstallazione MVC 4 (RC) utilizzando il programma di installazione standalone here risolto questo problema per me. Ancora non capisco cosa abbia causato il problema, ma posso conviverci.

7

La mia ipotesi è che si sta ancora utilizzando Razor 1 (MvcWebRazorHostFactory è < 4.0).

Verificare il web.config nel vostro Visualizzazioni cartella assomiglia a questo ...

<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> 
+0

Sembra così. –

+0

Se si utilizza MVC 4, si dovrebbe essere in grado di ottenere [raggruppamento risorse funzionante] (http://weblogs.asp.net/scottgu/archive/2011/11/27/new-bundling-and-minification-support- asp-net-4-5-series.aspx). Puoi provare a raggruppare i tuoi CSS? – SliverNinja

0

Il problema è di circa href= e quali no <tag>
Esempi:

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

suo ok a nido @ all'interno altro @section {}

+0

Perché il downvote? –

+1

Il downvote potrebbe essere dovuto al fatto che questa sintassi non dovrebbe più essere richiesta. http://www.davidhayden.me/blog/asp.net-mvc-4-the-new-tilde-slash-feature-in-razor-2 –

+0

Scott ha ragione, ma tecnicamente la soluzione di Peter funzionerà ancora se tu Sono accidentalmente su Razor 1. Meglio installare semplicemente Razor 2, comunque. ;) –

14

Questo potrebbe essere il risultato di a bug in Razor V2, dove un apostrofo/singola citazione in un commento HTML interrompe la risoluzione dei percorsi ~.

La soluzione alternativa consiste nell'utilizzare commenti Rasoio anziché commenti HTML. Ad esempio, sostituire <!-- Here's your comment--> con @* Here's your comment *@.

Siamo spiacenti, questo è un campo lungo, in quanto non ho idea se si dispone di commenti HTML, per non parlare di quelli contenenti citazioni singole.

+2

Ho risolto il problema, grazie! – Moeri

+0

Anch'io sono rimasto incantato anche da questo. La pagina su cui stavo lavorando aveva un commento html con un singolo "dentro. Eliminare il" o aggiungere un secondo "al commento risolve il problema –

+0

Questo funziona. Mi chiedo perché questo non è risolto in MVC5 da ora! – SepehrM

0

Ciò che ha risolto questo per me è stato disattivare Meleze.web HTML Minification.

1

Per me il problema era relativo solo ai tipi di immagine SVG. Risolto aggiungendo quanto segue al file web.config del progetto (non il web.config utilizzato dalle viste MVC4).

<configuration> 
    <system.webServer> 
     <staticContent> 
     <mimeMap fileExtension=".svg" mimeType="image/svg+xml" /> 
     </staticContent> 
    </system.webServer> 
</configuration> 
5

Ho avuto questo problema quando ho tagliato e incollato un codice di esempio in una vista. Alla fine ho avuto il tipo sbagliato di tilde!

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

vs

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

leggermente diverso - SOD per trovare