ASP.NET 2.0 (C#) 动态主题
一个逐步指南,用于在 ASP.NET 2.0 中创建动态主题。
引言
ASP.NET 2.0 使动态主题变得非常容易。无需羡慕拥有炫酷多主题的人,您可以立即拥有自己的主题!本文为您提供有关如何在 C# 中创建动态主题的逐步说明。您可以使用个人网站启动工具包来尝试此代码。
结果
现场演示可在此处查看 这里。点击左上角logo下方的“更改主题”。
代码
- 步骤 1:在 App_Code 文件夹下,添加一个名为 Theme.cs 的类文件
- 步骤 2:在 App_Code 文件夹下,添加一个名为 ThemeManager.cs 的
ThemeManager
类文件。 这将列出 /App_Themes 文件夹下的所有可用主题。 - 步骤 3:注释掉任何预定义的 themes,例如 web.config 中的
<!--<pages styleSheetTheme="Black"/>-->
。 您不需要这样做,因为应用程序级别的默认主题将在步骤 6 中的BasePage
类中指定。 - 步骤 4:在您的母版页中,例如 Default.master,添加一个数据源和一个单选按钮列表。如果您更喜欢,可以使用下拉列表。
- 步骤 5:在母版页的后台代码中,例如 Default.master.cs,添加这些方法
- 步骤 6:在 App_Code 下添加
BasePage
类,并指定默认主题。 这里,我们使用“White
”。 - 步骤 7:从
BasePage
继承使用动态主题的所有页面
public class Theme
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Theme(string name)
{
Name = name;
}
}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.Collections.Generic;
using System.IO;
public class ThemeManager
{
#region Theme-Related Method
public static List<Theme> GetThemes()
{
DirectoryInfo dInfo = new DirectoryInfo(
System.Web.HttpContext.Current.Server.MapPath("App_Themes"));
DirectoryInfo[] dArrInfo = dInfo.GetDirectories();
List<Theme> list = new List<Theme>();
foreach (DirectoryInfo sDirectory in dArrInfo)
{
Theme temp = new Theme(sDirectory.Name);
list.Add(temp);
}
return list;
}
#endregion
}
<asp:ObjectDataSource ID="ThemeDataSource" runat="server"
SelectMethod="GetThemes" TypeName="ThemeManager" ></asp:ObjectDataSource>
<asp:RadioButtonList ID="strTheme" runat="server" DataTextField=name
DataValueField=name OnSelectedIndexChanged="strTheme_SelectedIndexChanged"
OnDataBound="strTheme_DataBound" DataSourceID="ThemeDataSource"
AutoPostBack=true RepeatDirection=Horizontal />
protected void strTheme_DataBound(object sender, EventArgs e)
{
strTheme.SelectedValue = Page.Theme;
}
protected void strTheme_SelectedIndexChanged(object sender, EventArgs e)
{
Session.Add("MyTheme", strTheme.SelectedValue);
Server.Transfer(Request.FilePath);
}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class BasePage : System.Web.UI.Page
{
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
if (Session["MyTheme"] == null)
{
Session.Add("MyTheme", "White");
Page.Theme = ((string)Session["MyTheme"]);
}
else
{
Page.Theme = ((string)Session["MyTheme"]);
}
}
}
public partial class Default_aspx : BasePage
{
}
编程愉快!