作为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>
......此时,我不确定下一步该寻找什么。有什么建议吗?
答案 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中的位置文件停止工作的地方。
我希望这篇文章可以节省一些时间!