65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 ASP.NET 2.0 中在运行时动态更改页面主题

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.31/5 (30投票s)

2007年4月6日

CPOL

1分钟阅读

viewsIcon

138390

downloadIcon

2255

ASP.Net 引入了一个名为主题的便捷功能,通过该功能我们可以在设计时为页面分配不同的主题。不幸的是,内置不支持在运行时更改页面主题。以下是一个可用于在运行时更改页面主题的简单代码。

引言

这是一个可用于在运行时更改页面主题的简单代码。

背景

需要对样式表有基本的了解。

使用代码

实时演示

在继续之前,我建议您在此处查看实时演示,以了解我们所说的内容。

挑战

首先,我们可能会说我们可以通过在 Page_Preinit 事件中编写代码来轻松实现这一点,如下所示。

protected void Page_PreInit(object sender, EventArgs e)
    {
       Page.Theme = "Black"
       
    }

但是,这样做的问题是,我们无法从下拉框中赋值,因为 Page_Preinit 事件在下拉框更改值之前很久就触发了。

解决方案

  1. 创建一个会保存当前主题值的会话变量
  2. 在下拉组合框的选择更改事件中,将组合框中的值分配给会话变量。
  3. 在 Page_preInit 事件期间,将此变量的值分配给 Page.Theme 属性。
  4. 停止页面加载,并使用 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 在这里起着重要作用
如何在 ASP.NET 2.0 中在运行时动态更改页面主题 - CodeProject - 代码之家
© . All rights reserved.