我正在学习ASP.net,我一直在玩主题和母版页.我决定改变网站的主题,并使用web.config解决方案(将主题添加到web.config).我现在要做的是能够根据用户和用户选择的主题更改主题.
我一直无法找到任何教程,所有这些教程似乎都展示了如何更改单独的内容页面,但我想更改整个网站主题.
你怎么用最简单的方式去做呢?我没有连接到数据库atm.它只是为了练习:)
亲切的问候
创建一个继承所有页面的基页,并在 OnPreInit 事件中设置主题:
public class ThemePage : System.Web.UI.Page
{
protected override void OnPreInit(EventArgs e)
{
SetTheme();
base.OnPreInit(e);
}
private void SetTheme()
{
this.Theme = ThemeSwitcher.GetCurrentTheme();
}
}
Run Code Online (Sandbox Code Playgroud)
下面是 ThemeSwitcher 实用程序类,用于处理获取/保存当前主题并列出主题。既然你说你没有使用数据库,你可以使用会话:
public class ThemeSwitcher
{
private const string ThemeSessionKey = "theme";
public static string GetCurrentTheme()
{
var theme = HttpContext.Current.Session[ThemeSessionKey]
as string;
return theme ?? "Default";
}
public static void SaveCurrentTheme(string theme)
{
HttpContext.Current.Session[ThemeSessionKey]
= theme;
}
public static string[] ListThemes()
{
return (from d in Directory.GetDirectories(HttpContext.Current.Server.MapPath("~/app_themes"))
select Path.GetFileName(d)).ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
您需要一个可以更改主题的页面。添加一个下拉列表,后面的代码如下:
public partial class _Default : ThemePage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindData();
}
}
private void BindData()
{
var currentTheme = ThemeSwitcher.GetCurrentTheme();
foreach (var theme in ThemeSwitcher.ListThemes())
{
var item = new ListItem(theme);
item.Selected = theme == currentTheme;
ddlThemes.Items.Add(item);
}
}
protected void ddlThemes_SelectedIndexChanged(object sender, EventArgs e)
{
ThemeSwitcher.SaveCurrentTheme(ddlThemes.SelectedItem.Value);
Response.Redirect("~/default.aspx");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处下载示例应用程序。