您的位置:首页 > 其它

自己动手做博客之日志管理-2.2 模板页

2007-10-09 13:12 337 查看
VS.NET 2005中提供了ASP.NET 2.0核心框架,ASP.NET 2.0改进了以往版本对网页设计方面支持上的不足,新增和增强了很多的功能,其中母版页控件就是一例。
将母版页称为页面模板或许更容易理解它的作用,母版页中包含的是页面公共部分,即网页模板。母版页提供了开发人员已通过传统方式创建的功能,这些传统方式包括重复复制现有代码、文本和控件元素;使用框架集;对通用元素使用包含文件;使用ASP.NET用户控件等。母版页具有下面的优点:
l 使用母版页可以集中处理页的通用功能,以便可以只在一个位置上进行更新。

l 使用母版页可以方便地创建一组控件和代码,并将结果应用于一组页。例如,可以在母版页上使用控件来创建一个应用于所有页的菜单。

l 通过允许控制占位符控件的呈现方式,母版页使您可以在细节上控制最终页的布局。

l 母版页提供一个对象模型,使用该对象模型可以从各个内容页自定义母版页。

母版页实际由两部分组成,即母版页本身与一个或多个内容页。采用母版页制作的网站都含有两种文件:一种是母版页,一种是内容页。母版页的后缀为.master,里面封装页面的公共元素;内容页的后缀为.aspx,就是普通的aspx页面,里面包含了除母版页外的其他公共内容。在运行时,ASP.NET 2.0引擎会将两种页面合并再发到客户端的浏览器。
常见的母版页结构如图1-1所示。



[align=center]图1-1 母版页结构[/align]
从上图所示的效果可以看出,在母版页中包含了两个ContentPlaceHolder控件,这是母版页上使用的占位控件。如果要想母版页的某一区域可编辑,拖动该控件到该位置即可。但是,需要注意的是母版页中的ContentPlaceHolder控件的ID属性必须与内容页中Content控件的ContentPlaceHolderID属性绑定。
在Web项目的【解决方案资源管理器】窗格中右击项目名称选择【添加新项】命令,在弹出的【添加新项】对话框中选择【母版页】项,再单击【确定】按钮添加一个名为MasterPage.master的母版页到项目中。
切换至【源】视图,我们会发现母版页除了头部声明与普通的aspx页面不同外,代码结构上与普通的aspx页面并没有什么差别。
了解了以上预备知识之后,接下来开始使用母版页对系统进行布局。



[align=center]图1-2 使用母版页的系统[/align]
如图1-2所示为经过设计后母版页中的系统,可以很明显看出包含了一个ContentPlaceHolder控件,也就是说只有一个区域是可改变的。
由于在母版页中的内容是全局的,因此在图1-2所示的系统布局可以看到将博客的名称、导航链接和常用功能都固定在母版页中。这其中包含一些需要从数据库中读取来显示的信息,例如,系统中包含的文章数量和评论的数量等。
母版页与普通的ASPX页面一样,可以在后台文件中编写代码。在本系统中的母版页布局中包含有如下的语句:

<div id="nav_r">
<%=LogCount%>篇文章,<%=CommentCount%>篇评论, 当前日期:<%=DateTime.Now.ToString()%>

</div>

这些数据是要使用数据库的,需要在后台中通过编写代码操作数据库获取结果。双击打开MasterPage.master.cs文件,引用如下两个数据库所需的命名空间:

using System.Data.Sql;
using System.Data.SqlClient;

先为页面声明两个全局变量,这两个变量的名称与前台布局中的必须相同,然后在页面载入过程Page_Load添加语句,如下所示:

public string LogCount, CommentCount;

protected void Page_Load(object sender, EventArgs e)

{
if (!IsPostBack)

{
getLogCount();//获取日志数量

getCommentCount();//获取评论数量

}
}

其中IsPostBack是用来判断是第一次浏览该页,还是单击【刷新】按钮载入的页面。如果是第一次则调用getLogCount方法和getCommentCount方法。
getLogCount方法用于获取日志的数量,通过数据库分析得知,这个值需要对info表进行操作,如下所示为这个方法的代码:

void getLogCount() {

string strsql = "select count(id) as logCount from info";

dbconfig dbconn = new dbconfig();

SqlCommand cmd = new SqlCommand(strsql, dbconn.conn);

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read()) {

LogCount = dr["logCount"].ToString();

}
dr.Close();

dbconn.Clear();

}

这里是第一次使用数据库类,因此读者要重点掌握数据库类的使用方法。dr.Read()在有返回值是为true,往下的语句获取日志数量并赋于全局变量LogCount值。最后关闭连接,并释放资源。
getCommentCount方法则用来获取评论的数量,与getLogCount方法类似,不同的是这里操作的是Comment评论表,需要将结果保存到CommentCount变量,代码如下:

void getCommentCount()

{
string strsql = "select count(id) as CommentCount from Comment";

dbconfig dbconn = new dbconfig();

SqlCommand cmd = new SqlCommand(strsql, dbconn.conn);

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read()) {

CommentCount = dr["CommentCount"].ToString();

}
dr.Close();

dbconn.Clear();

}

图1-2所示的效果中还有一些同样需要操作数据库,我们将在下面对它们进行逐一介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: