8

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

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

Theme/Content/Images/Image.jpg Theme/Views/Layout.cshtml Theme/Styles/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 的图像,而是来自其他位置的图像。如果有人知道该位置是什么或如何覆盖它,我将不胜感激。

4

5 回答 5

25

我可能有点晚了,但这可能对其他人有帮助。

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

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

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

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

玩得开心!

最好的问候,蒂亚戈。

于 2012-03-20T17:44:02.957 回答
11

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

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

假设您有两个 Orchard 页面:site.com/mypagesite.com/something/mypage。Layout.cshtml 在它们中都被渲染。当您访问第二个时,适用于第一个的相对 URL 肯定会中断。

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

高温高压

于 2011-03-29T13:05:56.700 回答
6

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

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

<img src="@Url.Content(Html.ThemePath(WorkContext.CurrentTheme, "/Content/Images/bgBig.jpg"))" alt="Big background image" />
于 2012-12-05T17:40:52.283 回答
4

我很惊讶没有人提到您web.config在图像/脚本/样式所在的文件夹中需要以下内容(请参阅果园文档

<?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"))" />
于 2013-02-05T20:54:03.273 回答
0

如果您检查源代码,它应该会告诉您它在哪里尝试找到该图像并且失败了。这很可能是它遇到问题的相对路径,尝试在 css 中使用绝对路径,看看是否是问题所在。没有实际的网站,我无法确定。

于 2011-03-28T23:20:41.203 回答