图片未显示主题布局(Orchard CMS)

时间:2011-03-28 22:55:29

标签: asp.net asp.net-mvc image orchardcms theming

我正在尝试为Orchard CMS创建主题。我的模板不是为它制作的,所以我在显示Layout.cshtml中的图像时遇到了一些麻烦。

这是我的网络服务器上的当前文件夹结构(仅限主题文件夹结构):

主题/内容/图片/ image.jpg的 主题/浏览/ Layout.cshtml 主题/样式/的site.css

以下行不显示图像(位于Layout.cshtml中):

<img src="../Content/Images/bgBig.jpg" alt="Big background image" />

但是,此行显示图像(位于Site.css中):

background-image:url('../Content/Images/bgLines.png');

我认为问题是Layout.cshtml不显示Theme / Views / Layout.cshtml中的图像,而是显示来自其他位置的图像。如果有人知道该位置是什么或者如何覆盖它,我将非常感激。

5 个答案:

答案 0 :(得分:25)

我可能会有点迟到,但这对其他人可能有帮助。

要获取当前主题,然后构建动态路径(而不是绝对路径),请使用以下命令:

WorkContext.CurrentTheme:获取当前工作主题ExtensionDescriptor。

然后将其提供给Html.ThemePath URL构建器: 实施例

Html.ThemePath(WorkContext.CurrentTheme, "/Content/Images/SomeImage.png")

玩得开心!

祝你好运, 蒂亚戈。

答案 1 :(得分:11)

在Layout.cshtml中添加图片时,您应该使用主题的完整路径(例如 /Themes/My.Theme/Content/Images/MyImage.jpg )。请记住,您在[img]标记中提供的路径相对于浏览器中的URL ,而不是服务器上的路径。在MVC中,这些几乎永远不会相等。

Layout.cshtml视图文件作为每个请求的一部分加载,因此放在里面的相对路径几乎总是会中断。

想象一下,您有两个Orchard页面: site.com/mypage site.com/something/mypage 。 Layout.cshtml在两者中呈现。当您访问第二个URL时,第一个工作的相对URL肯定会中断。​​

通过指定/ Themes / YourTheme / Styles文件夹中的物理文件的绝对路径(默认)来直接加载CSS样式表,因此在这种情况下,相对URL将起作用。

HTH

答案 2 :(得分:6)

Thx Tiago为您的解决方案。我认为这实际上是正确的解决方案,而不是将我认为需要Orchard站点的完整路径链接到域的根目录。

原始问题的完整图像参考如下所示:

<img src="@Url.Content(Html.ThemePath(WorkContext.CurrentTheme, "/Content/Images/bgBig.jpg"))" alt="Big background image" />

答案 3 :(得分:4)

我很惊讶没有人提到你的图像/脚本/样式所在的文件夹中需要以下web.configsee the orchard docs

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <httpHandlers>
      <!-- iis6 - for any request in this location,
           return via managed static file handler -->
      <add path="*" verb="*" type="System.Web.StaticFileHandler" />
    </httpHandlers>
  </system.web>
  <system.webServer>
    <handlers accessPolicy="Script,Read">
      <!-- iis7 - for any request to a file exists on disk,
           return it via native http module.
           accessPolicy 'Script' is to allow for a managed 404 page. -->
      <add name="StaticFile" path="*" verb="*" modules="StaticFileModule"
           preCondition="integratedMode" resourceType="File"
           requireAccess="Read" />
    </handlers>
  </system.webServer>
</configuration>

此外,正如其他人所指出的,这是定位图像最可靠的方式:

<img src="@Url.Content(Html.ThemePath(WorkContext.CurrentTheme, "/Content/Header.png"))" />

答案 4 :(得分:0)

如果您检查源,它应该显示它在哪里尝试找到该图像并失败。它很可能是它遇到问题的相对路径,在css中尝试一个绝对路径来查看是否存在问题。没有实际的网站,我无法确定。