最近打算系统学习下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(); } }
……未完待续 事情太多了。。。。