2012-06-01 30 views
9

Como I understand it, se supone que una simple ruta ol '"~/foo" funciona como @ Url.Content ("~ /") en MVC 4. Sin embargo, estoy intentando haz esto y consigue muchos caminos rotos: la tilde todavía está allí cuando se genera el HTML.Tilde Slash Paths no funciona en MVC 4

Así, por ejemplo, tengo este camino en /Views/Shared/_Layout.cshtml:

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

Y el HTML entregados se ve así:

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

Estoy bastante seguro También tengo esto funcionando como un proyecto de MVC 4. de los siguientes cosas en el 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> 

... y en este punto, no estoy seguro de lo que debe buscar siguiente. ¿Alguna sugerencia?

+1

Parece que todavía está utilizando la maquinilla de afeitar 1, [no Razor 2] (http://stackoverflow.com/a/ 10194146/175679) – SliverNinja

+0

¿Puedes intentar crear una aplicación de Internet MVC 4 y probar esta característica? Tal vez no estés usando Razor 2 ya que @SilverNinja también mencionó si acabas de cambiar la referencia a MVC 4. –

+1

Intenté crear una nueva aplicación MVC 4 y la función aún falla. Intentando volver a instalar MVC 4. –

Respuesta

4

Reinstalación MVC 4 (RC) usando el instalador independiente here resolvieron este problema para mí. Todavía no entiendo qué causó el problema, pero puedo vivir con eso.

7

Supongo que todavía está ejecutando Razor 1 (MvcWebRazorHostFactory es < 4.0).

Verificar el web.config en sus Vistas carpeta se parece a esto ...

<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

Se ve así. –

+0

Si está utilizando MVC 4, debería poder obtener [bundling de recursos trabajando] (http://weblogs.asp.net/scottgu/archive/2011/11/27/new-bundling-and-minification-support- asp-net-4-5-series.aspx). ¿Puedes intentar agrupar tu CSS? – SliverNinja

0

La cuestión es sobre href= y no cuáles <tag>
Ejemplos:

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

Está bien para anidar @ dentro de otra @section {}

+0

¿Por qué el voto a favor? –

+1

El voto a favor puede deberse a que esta sintaxis ya no debería ser requerida. http://www.davidhayden.me/blog/asp.net-mvc-4-the-new-tilde-slash-feature-in-razor-2 –

+0

Scott tiene razón, pero técnicamente la solución de Peter seguirá funcionando si 's accidentalmente en Razor 1. Es mejor instalar Razor 2, sin embargo. ;) –

14

Esto podría ser como resultado de a bug in Razor V2, donde un apóstrofe/sola cita en un comentario HTML rompe resolución de ~ rutas.

La solución consiste en utilizar comentarios Razor en lugar de comentarios HTML. Es decir, reemplace <!-- Here's your comment--> con @* Here's your comment *@.

Disculpa, esta es una posibilidad remota, ya que no tengo idea de si tienes comentarios en HTML, y mucho menos que contengan comillas simples.

+2

Esto solucionó mi problema, ¡gracias! – Moeri

+0

Acabo de colgarme de esto también. La página en la que estaba trabajando tenía un comentario html con un solo "en él. Eliminar el" o agregar un segundo "al comentario corrige el problema. –

+0

Esto funciona. Me pregunto por qué esto no está resuelto en MVC5 por ahora! – SepehrM

0

Lo que me solucionó esto fue desactivar Meleze.web HTML Minification.

1

Para mí, el problema solo estaba relacionado con los tipos de imágenes SVG. Lo resolvió agregando lo siguiente al archivo web.config del proyecto (no el web.config utilizado por las vistas, MVC4).

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

Tuve este problema cuando corté y pegué un código de ejemplo en una vista. ¡Resultó que tenía el tipo equivocado de tilde!

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

vs

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

sutilmente diferente - SOD para encontrar