Asp.net

圖片未從主題佈局中顯示(Orchard CMS)

  • February 5, 2013

我正在嘗試為 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 的圖像,而是來自其他位置的圖像。如果有人知道該位置是什麼或如何覆蓋它,我將不勝感激。

在 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 將起作用。

高溫高壓

我可能有點晚了,但這可能對其他人有幫助。

要獲取目前主題然後建構動態路徑(而不是絕對路徑),請使用以下命令:

WorkContext.CurrentTheme:獲取目前工作主題 ExtensionDescriptor。

然後將其提供給 Html.ThemePath URL 建構器:例如。

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

玩得開心!

最好的問候,蒂亞戈。

引用自:https://stackoverflow.com/questions/5465996