我们有一个多语言网站,或文化敏感,现在需要定位一些静态内容;对于这个我正在使用主题,因为它似乎 是实现我想要的最简单的方法,但我不能为我的生活获取图像。
我在代码隐藏中设置主题,并且首先想到可能这是问题所在,但在检查时看起来我正在做正确的事情(在Pre-Init
上设置)。 / p>
我希望能够使用自动解析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"
在页面中应用主题无效。
是否有任何关于URL未解决的原因立即显而易见?
答案 0 :(得分:1)
使用Skin文件执行此操作。将您的图片代码更改为:
<asp:Image runat="server" SkinID="SomeImage/>
在App_Themes\MyTheme\
文件夹中,添加一个新的皮肤文件(MyTheme.skin)并添加:
<asp:Image runat="server" SkinID="SomeImage" ImageUrl="images\image.jpg"/>
此图片皮肤现在指向image.jpg
文件夹中的App_Themes\MyTheme\
。
对于动态图像,您可以在BasePage中执行此操作(假设您有一个):
public string ThemePath { get { return "~/App_Themes/" + this.Theme + "/"; } }
public string MapThemePath(string relativePath)
{
return string.Format("{0}{1}", this.ThemePath, relativePath);
}
但是,既然我看不到你在做什么,我不能说这是推荐的解决方案。通常,您的主题仅包含所需的内容或布局和显示。你在谈论动态图像,对我而言,它听起来并不像主题一样?不确定,只是一个想法。