Tilde Slash Paths在MVC 4中不起作用

时间:2012-06-01 15:38:58

标签: razor asp.net-mvc-4

作为I understand it,一个简单的“〜/ foo”路径应该像MVC 4中的@ Url.Content(“〜/”)一样工作。但是,我正在尝试这样做并获得许多破碎的路径 - 输出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>

......此时,我不确定下一步该寻找什么。有什么建议吗?

8 个答案:

答案 0 :(得分:16)

这可能是a bug in Razor V2的结果,其中HTML注释中的撇号/单引号会破坏~路径的分辨率。

解决方法是使用Razor注释而不是HTML注释。即,将<!-- Here's your comment-->替换为@* Here's your comment *@

很抱歉这是一个很长的镜头,因为我不知道你是否有HTML评论,更不用说含有单引号的评论了。

答案 1 :(得分:7)

我的猜测是你还在运行Razor 1(MvcWebRazorHostFactory是&lt; 4.0)。

确认视图文件夹中的web.config看起来像这样......

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

答案 2 :(得分:5)

当我将一些示例代码剪切并粘贴到视图中时,我遇到了这个问题。 原来我有错误的代字号!

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

VS

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

完全不同 - 寻找

的草皮

答案 3 :(得分:4)

使用独立安装程序here重新安装MVC 4(RC)为我解决了这个问题。我仍然不明白是什么导致了这个问题,但我可以忍受这个。

答案 4 :(得分:1)

对我来说,问题只与SVG图像类型有关。通过将以下内容添加到项目的web.config文件(视图使用的web.config,MVC 4)解决了这个问题。

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

答案 5 :(得分:0)

问题是关于href=而不是< tag > 例子:

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

可以将@嵌套在其他@section {}

答案 6 :(得分:0)

为我解决了这个问题,关闭了Meleze.web HTML Minification。

答案 7 :(得分:0)

对于MVC 5和Razor 3,我的问题原来是img标记之前(早于!)的html元素中的额外引号字符:

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

以上问题导致剃须刀忽略了波浪号(〜),将波浪号按原样/未转换的形式提供给浏览器。我花了很长时间才找到问题所在,最终我发现了这个问题,方法是将img标记移至文件顶部,并发现该文件在此处正常工作,然后采用分治法缩小了* .cshtml中的位置文件停止工作的地方。

我希望这篇文章可以节省一些时间!