您的位置:首页 > 编程语言

BlogEngine 代码学习笔记之一

2009-11-01 21:37 148 查看
最近打算系统学习下asp.net,看了几个样例,就打算从BlogEngine开始学起了,代码量比较合适。准备写一些笔记,BlogEngine的学习笔记已经有人写了,BlogEngine.Net架构与源代码分析系列 。我会参考这一个系列,尽量多写一些这个系列没有提到的部分吧。这个系列的起点比较高,前几篇就分析了一些比较本质的东西,这个对于像我这样的初学者来说,有点抽象,难以把握。所以我这个系列先从页面上的主要功能,以及大致上如何实现这些功能看起,然后再深入抽象出它的开发思想所用的模式等等。我用的BlogEngine的版本是1.5.0.7。

拿到代码首先先看主页,很遗憾的是,在VS里面打不开这个首页,提示找不到母版页。我很奇怪,在一个朋友的帮助下才知道BlogEngine的所有页面都继承自一个基类:

BlogEngine.Core.Web.Controls.BlogBasePage

这个类的OnPreInit事件中,有这样一段:

private string _Theme = BlogSettings.Instance.Theme;
protected override void OnPreInit(EventArgs e)
{
if (Request.QueryString["theme"] != null)
_Theme = Request.QueryString["theme"];

MasterPageFile = Utils.RelativeWebRoot + "themes/" + _Theme + "/site.master";

base.OnPreInit(e);

……

BlogEngine是通过这种方式动态加载母版页的。

主页的代码很简单,就是两个控件,一个是PostList,这个是页面的主体,另一个是PostCalendar,这个是一个日期控件,代码在网站项目的App_Code下面,是一个继承自.NET的Calendar控件的控件,主要实现的功能是在日历的日期上显示当日发布的文章的名字,它的核心就是重写Calendar的Render方法,注意在原来的代码中这个控件的Visible是false,要把它设置成true才能看到效果。这个控件的功能比较独立,不再多说。下面主要看PostList控件。PostList控件其实是一个容器,真正显示每一篇文章的是下面要谈到的PostView控件,PostList中包含了若干PostView,并且PostList实现了分页功能。PostList的Load事件如下:

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsCallback)
{
BindPosts();
InitPaging();
}
}
……未完待续 事情太多了。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: