2011-03-14 52 views
0

我們有一個多語言網站,或文化敏感的,一些靜態內容現在需要針對性;爲此,我使用主題,因爲它似乎達到我想要的最簡單的方法,但我不能爲我的生活讓圖像拾起。ASP.NET主題以編程方式:圖片路徑

我在代碼隱藏中設置主題,起初認爲可能是這個問題,但在檢查時,它看起來像我正在做正確的事情(設置在Pre-Init)。

我希望能夠引用使用相對路徑,其中App_Themes/ThemeName/會自動解決,如圖像,:

<asp:Image runat="server" ImageUrl="images\image.jpg"/> 

無論出於何種原因,但是,圖像不被通過拉可言。

這是我們已有的代碼來設置主題(唯一真正相關的部分,我敢肯定,作爲Theme = CurrentSite.CultureName,這是成功應用):

Private Sub SetTheme() 
    Dim themesPath = Server.MapPath("~/App_Themes") 
    If Directory.Exists(themesPath) Then 
     Dim themePaths = Directory.GetDirectories(themesPath) 
     Dim themePathInfo As DirectoryInfo 
     For Each _path In themePaths 
      themePathInfo = New DirectoryInfo(_path) 
      If Not themePathInfo Is Nothing Then 
       If themePathInfo.Name = CurrentSite.CultureName Then 
        Theme = CurrentSite.CultureName 
        Exit For 
       End If 
      End If 
     Next 
    End If 
End Sub 

在上面的代碼, CurrentSite.CultureName將是一個語言文化名稱(例如,en-gb或nn-no),它具有包含所有必需資源的現有相應主題文件夾。

頁面確實有EnableTheming設置爲True。另外,我嘗試刪除主題設置代碼並在頁面中使用Theme="en-gb"無效。

有沒有什麼立即明顯的爲什麼網址沒有解決?

回答

1

使用皮膚文件來做到這一點。改變你的形象標籤:

<asp:Image runat="server" SkinID="SomeImage/> 

而在你App_Themes\MyTheme\文件夾,添加一個新的Skin文件(MyTheme.skin),並添加這樣的:App_Themes\MyTheme\

<asp:Image runat="server" SkinID="SomeImage" ImageUrl="images\image.jpg"/> 

此圖片的皮膚現在指向image.jpg夾。

對於動態圖像,你可以在你的BasePage做到這一點(假設你有一個):

public string ThemePath { get { return "~/App_Themes/" + this.Theme + "/"; } } 

public string MapThemePath(string relativePath) 
{ 
    return string.Format("{0}{1}", this.ThemePath, relativePath); 
} 

但是,因爲我看不到你實際上在做什麼,我不能說這是推薦的解決方案。一般來說,你的主題只包含需要的東西或佈局和顯示。你在談論動態圖像,對我而言,聽起來不像它屬於主題?不確定,只是一個想法。

+0

對於每個圖像?這是我主要關心的問題,因爲有些圖像是根據數據實時生成的。 – 2011-03-21 13:43:14

+0

好的 - 更新了我的答案。 – 2011-03-21 13:55:20

+0

感謝您的回答;這是我所推遲的,但看起來可能是唯一的解決方案 - 至少暫時是這樣。 – 2011-03-23 21:38:33