探索ASP.NET Forum皮肤主题的更换

原创 2007年09月23日 11:05:00
 

HTML Tags and JavaScript tutorial



探索ASP.NET Forum皮肤主题的更换




还记得duwamish吗?在那里面,一些页面由用户控件组成,而其所承担的逻辑处理都是在控件内部完成的,这样是把控件做为单独的逻辑模块使用。在forum里,我们又看到了这种处理方法,并且,更加的复杂和灵活,用来实现皮肤主题的更换。
通过前面的两篇笔记,已经大致了解了forum的控件使用,下面就做一次该方面的总结。(广告时间:之所以先关注这个,是因为我想把下一版的stella里使用这种模式。请大家期待大概两个星期后完成的Stella Forum V 1.2)
在forum中,页面由“模块控件”(我自己起的名字,呵呵)组成,这些模块控件其实是
由负责呈现内容的的用户控件和负责进行逻辑处理的自定义空间共同组成
的。这样的隔离处理是为了可以方便的更换用户控件达到更换皮肤的目的,逻辑操作都一样,所以后面的自定义控件就不需要改动。还有比较重要的是,页面上标记的都是自定义控件,这个也不会因皮肤的更换而修改。
实际上,forum里的页面和用户控件很少有codebehind的代码,因为逻辑即处理都交给自定义控件了。这样可以达到一种即插即用的效果,比如那个登陆模块,你可以随心的放到任何地方,而不用修改页面处理代码。
主题文件都放在统一的目录下,加载的时候会直接到该目录下找相应的文件。
拿登陆控件来分析,主要设计这三个控件:
Skin-Login.ascx
AspNetForums.Controls.Login
AspNetForums.Controls.SkinnedForumWebControl
Skin-Login提供了登陆时需要呈现的html,包括文本框、按钮等,Login用来初始化Login并对提交事件进行处理,SkinnedForumWebControl是Login的基类,主要作用是动态加载需要使用的用户控件。
CreateChildControls方法扮演了重要的角色,SkinnedForumWebControl里有两个方法LoadSkin和 InitializeSkin都是在CreateChildControls被使用。详细的说,先是LoadSkin加载要使用的用户控件,然后在 InitializeSkin里对这个控件进行初始化。注意InitializeSkin是vietual的,这个方法的实现主要是在个各子类(也就是具 体的自定义控件,在这里是Login)。在InitializeSkin重要的是对各种事件的订阅,比如登陆时要点按钮,对点击事件的订阅就在这里。过程 就是先用FindControl找到相应的控件,然后在处理。
要加载的具体控件是在子类中先定好,然后在基类中加载。CreateChildControls的触发顺序是先子类后基类。
系统怎么知道该加载哪个主题?这个一开始有个默认设置,然后用户可以自己更改需要的主题。在用户控制面板中可以看到该选项。
接下来的问题,在用户面板中可以选择需要哪个主题,那系统是怎么知道都有哪些主题?我们可以看提供选择的那个控件是AspNetForums.Controls.ThemeDropDownList,在该控件里完成了该项功能,在这里给出一行代码:
string[] dirs = Directory.GetDirectories( context.Request.PhysicalApplicationPath + ForumConfiguration.GetConfig().ForumFilesPath + "//themes" );
这样,forum是直接到themes文件夹下看有哪些主题包,然后显示出来供选择。大家可以到官网
http://bbs.hidotnet.com
/ 下一个主题包,然后直接解压到这个文件夹,这样新的主题就可以用了。刚才我下了那个龙翔的主题,也没有看安装说明什么的,直接就把里面的default文 件夹改名成lxSkin,然后放到themes里,就直接可以用了,用户在选择的时候会看到两个选择default和lxSkin。 
 


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

ASP.NET主题和皮肤

asp.net的服务器端控件提供了多种样式的设计,如果对每个控件都单独设置,是比较繁琐的事情,所以微软也提供了针对这些服务器端控件的样式管理,其实也可以通过css来控制部分服务器端控件的样式,比如te...

ASP.NET的皮肤、主题和母版页

第12章  ASP.NET的皮肤、主题和母版页 在Web应用程序开发中,一个良好的Web应用程序界面能够让网站的访问者耳目一新,当用户访问Web应用时,网站的界面和布局能够提升访问者对网站的兴趣和继...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Asp.net主题(theme)和皮肤(skin)

asp.net的服务器端控件提供了多种样式的设计,如果对每个控件都单独设置,是比较繁琐的事情,所以微软也提供了针对这些服务器端控件的样式管理,其实也可以通过css来控制部分服务器端控件的样式,比如te...

ASP.NET:主题中的皮肤和样式表

ASP.NET:验证控件 ASP.NET:母版页与内容页 ASP.NET:主题中的皮肤和样式表   一、加载主题(皮肤、样式表)的多种方式 除了在页面指令中采用Theme或者Styl...

Asp.net主题(theme)和皮肤(skin)的使用

asp.net的服务器端控件提供了多种样式的设计,如果对每个控件都单独设置,是比较繁琐的事情,所以微软也提供了针对这些服务器端控件的样式管理,其实也可以通过css来控制部分服务器端控件的样式,比如te...

在ASP.NET 2.0中使用样式、主题和皮肤

ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme)。接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉。通过改...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)