我正在尝试为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中的图像,而是显示来自其他位置的图像。如果有人知道该位置是什么或者如何覆盖它,我将非常感激。
答案 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.config
(see 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中尝试一个绝对路径来查看是否存在问题。没有实际的网站,我无法确定。