2011-03-28 54 views
7

我正尝试为Orchard CMS创建主题。我拥有的模板并不是为了这个,所以我有一些麻烦显示来自Layout.cshtml的图像。从主题布局不显示的图像(乌节CMS)

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

主题/内容/图像/ 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不显示从主题/浏览/ Layout.cshtml,而是从其他位置的图像。如果有人知道那个位置是什么或如何覆盖它,我会很感激。

回答

11

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

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

想象一下,你有两个果园页:site.com/mypagesite.com/something/mypage。 Layout.cshtml在它们中都得到渲染。当您访问第二个网址时,第一个网址的相对网址肯定会中断。

CSS样式表通过指定在/主题/ YourTheme/Styles文件夹(默认)物理文件绝对路径直接加载,所以在这种情况下,相对URL的工作。

HTH

+0

非常感谢!这是解决方案!除了主播Orchard CMS的正式版本之外,你能推荐我额外的文档吗? – 2011-03-29 21:32:22

+1

有几个关注乌节开发和填补缺失文档部分的博客:)我推荐阅读这些文章。 – 2011-03-29 22:27:08

+2

忘记了他们:)贝特朗勒罗伊的 - http://weblogs.asp.net/bleroy/,我的 - http://www.szmyd.com.pl,尼克梅恩的 - http://www.themayneissue.com/HTH – 2011-03-29 22:33:34

0

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

24

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

为了得到当前的主题,然后建立一个动态路径(而不是绝对路径)使用此:

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

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

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

玩得开心!

此致敬意, 蒂亚戈。

+1

CSS中的路径怎么样? – autonomatt 2013-10-02 11:16:43

5

Thx Tiago为您的解决方案。我认为这实际上是正确的解决方案,而不是连接我认为需要Orchard站点位于域名根部的完整路径。

原题的完整图像的参考应该是这样的:

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

我很惊讶,没有人提到,你需要在你的图像/脚本/风格所在的文件夹下面的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"))" /> 
+0

我添加了这个web.config,我的图片现在可以工作,但是我的css文件有500个错误,例如:http:// localhost:30321/Themes/ImmoWhat/Styles/site.css(GET Error 500) – Jerome2606 2014-03-15 14:43:25

+0

相反,我实际上必须从我的'/ Styles/Images'文件夹中删除* web.config文件才能运行。 – James 2014-09-18 22:32:10