后台代码文件中特别重要的是与评论表单的提交按钮的Click事件相关联的部分。到现在为止,我们一直使用标准ASP.NET控件绑定到我们的业务逻辑层。然而,在这部分代码中,我们显式地使用业务逻辑层把新的评论保存到数据库。相关代码如下:
using BLOGO.NET.Business;
//……省略其他代码
Comment com = new Comment();
com.author = Server.HtmlEncode(CommentName.Text);
// 1.为了防止可能存在恶意用户把HTML代码注入到评论中,我们将对评论内容进行专门的编码处理
// 2.为了保留用户输入的换行符,我们使用HTML标记元素<br/>来替换\r字符
com.body = Regex.Replace(Server.HtmlEncode(CommentBody.Text), @"\r", "<br/>", RegexOptions.Multiline);
com.blog_id = long.Parse(Request.QueryString["page"]);
com.datecreated = System.DateTime.Now;
com.datemodified = System.DateTime.Now;
com.IP = Request.UserHostAddress;
CommentManager.Save(com);
//……省略其他代码
Comment com = new Comment();
com.author = Server.HtmlEncode(CommentName.Text);
// 1.为了防止可能存在恶意用户把HTML代码注入到评论中,我们将对评论内容进行专门的编码处理
// 2.为了保留用户输入的换行符,我们使用HTML标记元素<br/>来替换\r字符
com.body = Regex.Replace(Server.HtmlEncode(CommentBody.Text), @"\r", "<br/>", RegexOptions.Multiline);
com.blog_id = long.Parse(Request.QueryString["page"]);
com.datecreated = System.DateTime.Now;
com.datemodified = System.DateTime.Now;
com.IP = Request.UserHostAddress;
CommentManager.Save(com);
请注意上面的代码中我们是怎样使用以前定义的业务逻辑层的代码把一个新的评论插入到数据库中的。
设计文件页面—File.aspx
文件页面File.aspx在本系统中具有特殊作用。它的目的是用于显示一个querystring参数中的ID指定的文件的二进制内容。因此,我们需要人工干预ASP.NET的标准HTTP响应对象,修改它的MIME类型,使之能够显示二进制数据(即图像数据)。
在文件File.aspx的Page_Load事件中,下列代码负责实现上述功能:
设计标签云页面—TagCloud.aspx
protected void Page_Load(object sender, EventArgs e)
{
//检查是否传递了文件标识符
if (Request.QueryString["file"] != null)
{
//取得文件对象
long fileID = long.Parse(Request.QueryString["file"].ToString());
BLOGO.NET.Business.File myFile = FileManager.GetItem(fileID);
if (myFile != null) {
//在数据库中发现一个文件对象,则输出此文件的内容
Response.Clear();
Response.ContentType = myFile.mime;
Response.OutputStream.Write((byte[])myFile.filecontent, 0, (int)myFile.filecontent.Length);
Response.End();
}
else
{
//没有找到与指定的文件标识符相匹配的文件
throw new Exception("Invalid file identifier: " + fileID.ToString());
}
}
}
{
//检查是否传递了文件标识符
if (Request.QueryString["file"] != null)
{
//取得文件对象
long fileID = long.Parse(Request.QueryString["file"].ToString());
BLOGO.NET.Business.File myFile = FileManager.GetItem(fileID);
if (myFile != null) {
//在数据库中发现一个文件对象,则输出此文件的内容
Response.Clear();
Response.ContentType = myFile.mime;
Response.OutputStream.Write((byte[])myFile.filecontent, 0, (int)myFile.filecontent.Length);
Response.End();
}
else
{
//没有找到与指定的文件标识符相匹配的文件
throw new Exception("Invalid file identifier: " + fileID.ToString());
}
}
}
TagCloud页面负责列出博客中使用的标签链接并且根据每一个标签中博客入口的数目调整这些链接的大小。显然,目前并不存在标准的ASP.NET控件来完成这样的任务;因此,我们使用下面的方案来实现上述功能:
该页面包含一个标签控件。
后台代码文件的Page_Load事件中包含生成标签云的逻辑。为此,我们不但使用了业务逻辑层的TagManager类,而且还专门创建了一些计算公式来分布标签的权重(重要性)。
层叠样式表文件View\CSS\default.css中包含了预定义的标签大小元素,用于决定每一个标签的字体的大小。
总结
在本部分中,我们首先讨论用户接口母版页面的设计,然后重点讨论系统中主要用户接口页面的设计问题。在接下来的第五篇中,我们将讨论了系统中主要管理页面设计的设计问题。