9

我了解,一个普通的“~/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>

...在这一点上,我不确定接下来要寻找什么。有什么建议么?

4

8 回答 8

17

这可能是Razor V2 中的一个错误的结果,其中 HTML 注释中的撇号/单引号会破坏~路径的解析。

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

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

于 2013-07-25T10:49:32.837 回答
7

我的猜测是您仍在运行 Razor 1(MvcWebRazorHostFactory<4.0)。

验证Views文件夹中的 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>
于 2012-06-01T15:58:57.243 回答
5

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

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

对比

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

微妙的不同 - 草皮找到

于 2015-01-27T20:07:34.260 回答
4

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

于 2012-06-01T16:15:38.967 回答
1

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

<configuration>
   <system.webServer>
      <staticContent>
         <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      </staticContent>
   </system.webServer>
</configuration>
于 2014-03-31T11:17:37.053 回答
1

对于 MVC 5 和 Razor 3,对我来说,问题原来是在 img 标签之前(很久以前!)的 html 元素中出现了一个额外的引号字符:

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

上述问题导致 razor 忽略波浪号 (~),将其按原样/未转换提供给浏览器。花了我很长时间才找到问题,我最终通过将 img 标签移动到文件顶部并发现它在那里工作正常,然后采用分而治之的方法来缩小 *.cshtml 中的位置文件停止工作。

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

于 2019-10-09T19:21:43.047 回答
0

问题是关于href=而不是哪些< tag >
示例:

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

可以嵌套@在其他内部@section {}

于 2012-10-05T10:34:53.033 回答
0

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

于 2013-09-06T08:52:29.240 回答