【问题标题】:Tilde Slash Paths Not Working in MVC 4波浪线路径在 MVC 4 中不起作用
【发布时间】:2012-06-01 15:38:57
【问题描述】:

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

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

【问题讨论】:

  • 听起来你还在用 Razor 1,not Razor 2
  • 您可以尝试创建一个 MVC 4 Internet 应用程序并尝试此功能吗?如果您只是更改了对 MVC 4 的引用,也许您没有使用 Razor 2,因为 @SilverNinja 也提到过。
  • 我尝试创建一个新的 MVC 4 应用程序,但该功能仍然失败。将尝试重新安装 MVC 4。

标签: razor asp.net-mvc-4


【解决方案1】:

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

解决方法是使用 Razor cmets 而不是 HTML cmets。即,将&lt;!-- Here's your comment--&gt; 替换为@* Here's your comment *@

对不起,这是一个很长的镜头,因为我不知道你是否有 HTML cmets,更不用说包含单引号的了。

【讨论】:

  • 我也刚刚挂断了电话。我正在处理的页面有一个 html 评论,其中包含一个 "。删除 " 或在评论中添加第二个 " 可以解决问题。
  • 这是我的原因:---> 在页面顶部关闭评论时额外的破折号。
【解决方案2】:

我的猜测是您仍在运行 Razor 1(MvcWebRazorHostFactory

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

【讨论】:

【解决方案3】:

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

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

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

微妙的不同 - 草皮发现

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        对于 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 中的位置文件停止工作。

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

        【讨论】:

          【解决方案7】:

          问题是关于href= 而不是&lt; tag &gt;
          例子:

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

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

          【讨论】:

          • 投反对票可能是因为不再需要这种语法。 davidhayden.me/blog/…
          • Scott 是对的,但从技术上讲,如果您不小心使用了 Razor 1,Peter 的解决方案仍然有效。不过,最好只安装 Razor 2。 ;)
          【解决方案8】:

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

          【讨论】:

            猜你喜欢
            • 2014-04-22
            • 1970-01-01
            • 2019-05-31
            • 2011-03-05
            • 1970-01-01
            • 2011-09-19
            • 1970-01-01
            • 2021-10-15
            • 2019-06-07
            相关资源
            最近更新 更多