2011-03-28 58 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