Subtext中的skin实现方法
2007-04-06 20:51 Clingingboy 阅读(1568) 评论(9) 编辑 收藏 举报
Subtext为.TEXT的个人版本.所以有很多相似,至今才来学习这个开源项目,也打算以此为基础修修补补.好好的分析一下其实现原理.
现在的博客都是可以随意换皮肤的,暂且不关注其是如何加载皮肤的.由于asp.net中有用户控件,所以开发者喜欢将一个系统的局部功能做在一个用户控件里面,然后在页面进行组装,这是个好办法。
原则的第一点是开发者必须保证实现用户控件局部的小功能,但发布以后用户可能不需要这么多功能,如博客园,你可以有选择性的在页面选择你喜欢的功能。可以说你在DIY页面。
接着,当你完成程序以后,你可能会给用户提供一个默认的界面和默认的博客功能,接着提供多套博客模板供选择。这里就引出一个问题,其他模板我有必要重新再写一遍程序吗?即我没必要重新为另外一套模板因为界面的不同重新实现同样的功能而白写代码。
我们该如何做呢?
一.尽量多的把功能拆分,然后完整的实现业务逻辑。如下代码,注意Inherits属性
<%@ Control Language="c#" Inherits="Subtext.Web.UI.Controls.BlogStats" %>
<ul style="display: none;">
<li>Posts - <asp:Literal ID="PostCount" Runat = "server" /></li>
<li>Stories - <asp:Literal ID="StoryCount" Runat = "server" /></li>
<li>Comments - <asp:Literal ID="CommentCount" Runat = "server" /></li>
<li>Trackbacks - <asp:Literal ID="PingTrackCount" Runat = "server" /></li>
</ul>
接着定义一个Subtext.Web.UI.Controls.BlogStats类
protected System.Web.UI.WebControls.Literal PostCount;
protected System.Web.UI.WebControls.Literal StoryCount;
protected System.Web.UI.WebControls.Literal CommentCount;
protected System.Web.UI.WebControls.Literal PingTrackCount;


protected override void OnLoad(EventArgs e)
{
base.OnLoad (e);
if(Context != null)
{
BlogInfo info = Config.CurrentBlog;
PostCount.Text = info.PostCount.ToString(CultureInfo.InvariantCulture);
StoryCount.Text = info.StoryCount.ToString(CultureInfo.InvariantCulture);
CommentCount.Text = info.CommentCount.ToString(CultureInfo.InvariantCulture);
PingTrackCount.Text = info.PingTrackCount.ToString(CultureInfo.InvariantCulture);
}
}
看看上面,你是否记得你是如何实现的,我们一般都是动态加载cs文件的,创建ascx文件的时候,vs就自动帮你加了个cs文件。那我们也可以变通下,这样的做法就可以实现模板的做法。
与用户的约定
记得你用的是用户控件,而非自定义控件,当你页面上使用服务器控件时,且存在业务逻辑时,必须保证服务器控件ID的正确性。
主要思想,把一个用户控件实现的类抽出来,供同功能的其他的用户控件使用,很简单,记录下
现在的博客都是可以随意换皮肤的,暂且不关注其是如何加载皮肤的.由于asp.net中有用户控件,所以开发者喜欢将一个系统的局部功能做在一个用户控件里面,然后在页面进行组装,这是个好办法。
原则的第一点是开发者必须保证实现用户控件局部的小功能,但发布以后用户可能不需要这么多功能,如博客园,你可以有选择性的在页面选择你喜欢的功能。可以说你在DIY页面。
接着,当你完成程序以后,你可能会给用户提供一个默认的界面和默认的博客功能,接着提供多套博客模板供选择。这里就引出一个问题,其他模板我有必要重新再写一遍程序吗?即我没必要重新为另外一套模板因为界面的不同重新实现同样的功能而白写代码。
我们该如何做呢?
一.尽量多的把功能拆分,然后完整的实现业务逻辑。如下代码,注意Inherits属性








接着定义一个Subtext.Web.UI.Controls.BlogStats类


















看看上面,你是否记得你是如何实现的,我们一般都是动态加载cs文件的,创建ascx文件的时候,vs就自动帮你加了个cs文件。那我们也可以变通下,这样的做法就可以实现模板的做法。
与用户的约定
记得你用的是用户控件,而非自定义控件,当你页面上使用服务器控件时,且存在业务逻辑时,必须保证服务器控件ID的正确性。
主要思想,把一个用户控件实现的类抽出来,供同功能的其他的用户控件使用,很简单,记录下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现