.NET CFWindows VistaWindows 2003.NET 3.0Windows 2000Windows XP.NET 2.0C# 2.0初学者HTML开发Visual StudioWindows.NETASP.NETC#
如何在 ASP.NET 2.0 中在运行时动态更改页面主题






2.31/5 (30投票s)
ASP.Net 引入了一个名为主题的便捷功能,通过该功能我们可以在设计时为页面分配不同的主题。不幸的是,内置不支持在运行时更改页面主题。以下是一个可用于在运行时更改页面主题的简单代码。
引言
这是一个可用于在运行时更改页面主题的简单代码。
背景
需要对样式表有基本的了解。
使用代码
实时演示
在继续之前,我建议您在此处查看实时演示,以了解我们所说的内容。
挑战
首先,我们可能会说我们可以通过在 Page_Preinit 事件中编写代码来轻松实现这一点,如下所示。
protected void Page_PreInit(object sender, EventArgs e) { Page.Theme = "Black" }
但是,这样做的问题是,我们无法从下拉框中赋值,因为 Page_Preinit 事件在下拉框更改值之前很久就触发了。
解决方案
- 创建一个会保存当前主题值的会话变量
- 在下拉组合框的选择更改事件中,将组合框中的值分配给会话变量。
- 在 Page_preInit 事件期间,将此变量的值分配给 Page.Theme 属性。
- 停止页面加载,并使用 server.transfer 方法重新加载同一页面,如下所示
protected void Page_PreInit(object sender, EventArgs e) { string thm; thm = (string)Session["themeSelected"]; if (thm != null) { Page.Theme = thm; DropDownList1.Text = thm; } else { Session["themeSelected"] = DropDownList1.Text; Page.Theme = "Blue"; } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { Session["themeSelected"] = DropDownList1.Text; Server.Transfer(Request.FilePath); }
摘要
问题是通过使用会话变量并在页面加载事件中使用 server.transfer 方法刷新页面来解决的
下载
包含示例的完整功能源代码可以从此处下载
关注点
- Page_preinit 在控件初始化之前很久就触发
- 会话变量用于在页面加载事件中存储和检索页面主题
- server.transfer 在这里起着重要作用