动态应用主题

      通过处理页面的PreInit事件可以在页面中动态应用主题。在请求页面时,这是第一个被触发的事件。其后的Load或PreRender等事件是不能动态应用主题的。

 

      首先,我们需要在Web.config配置文件中定义Profile。被选择的主题保存在Profile对象中。当把信息保存在Profile对象中时,在浏览多个站点时这个信息仍然可以保留。

    <system.web>
      
<profile>
        
<properties>
          
<add name="UserTheme"/>
        
</properties>
      
</profile>
    
</system.web>

 

      然后,在页面编写动态应用主题的方法。

 

    //Web Application项目下的代码
    
using System.Web.Profile;

    
protected void Page_PreInit(object sender, EventArgs e)
    {
        
if (Request["theme"!= null)
        {
            
switch (Request["theme"])
            {
                
case "green":
                    ProfileBase.Properties[
"UserTheme"].DefaultValue = "Ch6_GreenTheme";
                    
break;
                
case "pink":
                    ProfileBase.Properties[
"UserTheme"].DefaultValue = "Ch6_PinkTheme";
                    
break;
            }
            Theme 
= (string)ProfileBase.Properties["UserTheme"].DefaultValue;
        }
    }
   
<%--以上在Application中的代码,哪位高手有更好一点的方法,请跟帖!谢谢--%>
 


    
//Website项目下的方法
     
<script runat="server">
        
protected void Page_PreInit(object sender, EventArgs e)
        {
            
if (Request["theme"!= null)
            {
                
switch (Request["theme"])
                {
                    
case "green":
                        Profile.UserTheme 
= "Ch6_GreenTheme";
                        
break;
                    
case "pink":
                        Profile.UserTheme 
= "Ch6_PinkTheme";
                        
break;
                    
default:
                        
break;
                }
                Theme 
= (string)Profile.UserTheme;
            }
        }
     
</script>

 

 

       注:因为在PreInit事件触发后,控件树并没有创建完成,所以不能引用页面中的控件。所以,以上这个例子是通过超链接来选择主题的。

     <li><a href="ShowDynamicTheme.aspx?theme=green">Green Theme</a></li>
     
<li><a href="ShowDynamicTheme.aspx?theme=pink">Pink Theme</a></li>

 

 

posted on 2008-08-15 12:54  单简  阅读(366)  评论(0编辑  收藏  举报

导航