ASP.NET编程主题:图像路径

时间:2011-03-14 11:51:35

标签: asp.net vb.net themes

我们有一个多语言网站,或文化敏感,现在需要定位一些静态内容;对于这个我正在使用主题,因为它似乎 是实现我想要的最简单的方法,但我不能为我的生活获取图像。

我在代码隐藏中设置主题,并且首先想到可能这是问题所在,但在检查时看起来我正在做正确的事情(在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未解决的原因立即显而易见?

1 个答案:

答案 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);
}

但是,既然我看不到你在做什么,我不能说这是推荐的解决方案。通常,您的主题仅包含所需的内容或布局和显示。你在谈论动态图像,对我而言,它听起来并不像主题一样?不确定,只是一个想法。