一.概述:
留言簿是网站的一个重要组成部分,是访问者发表意见的场所,也是网站管理员了解网站基本运行情况的有力工具,所以留言簿在现在的网站中扮演了十分重要的角色。
不过在以前开发一个留言簿并不是一件容易的事,开发者的工作量往往会很大。而现在随着微软推出VS.NET,相应的技术也推陈出新。特别是XML技术在.NET Framework中的广泛运用,使得整个.NET构架具有十分优越的基础。而ASP.NET中推出的崭新的编程模型更使得开发Web应用程序变得非常容易。本文就结合ASP.NET技术和XML技术的优点向大家介绍如何打造一个属于自己的留言簿。
二.实现方法:
一个基本的留言簿应至少包括两个功能:接受用户输入的信息并保存该信息到后台数据库;显示用户输入的信息。用户输入的信息一般包括用户名、Email地址、QQ号码、用户主页、留言信息等,这些信息通常是保存在后台数据库的某个表中的,不过本文要运用一个XML文件来存储这些信息。显示用户输入的信息时一般得把所有的信息都显示出来,这里的方法就是从XML文件中读取数据并运用XSLT技术对其进行格式转换,最后以HTML的形式显示在浏览器中。
这样,我们的留言簿就需要两个Web页面,一个用于接受用户的输入信息,另一个用于显示用户已经输入过的信息。而存储信息的XML文件(guestbook.xml)则需具有如下的结构:
<?xml version="1.0" encoding="GB2312"?>
<guestbook>
<guest>
<name>令狐冲</name>
<email>doose@etang.com</email>
<qq>10102350</qq>
<homepage>www.doose.com</homepage>
<comment>本留言簿由"令狐冲"创建,希望你能喜欢哦:)要知道如何创建一个属于自己的留言簿,那么就请仔细阅读《运用ASP.NET和XML技术打造留言簿》一文!</comment>
</guest>
</guestbook>
下面我们先来创建用于接受用户输入信息的Web页面-GuestBook.aspx。根据前面所提的基本要求,该Web页面包括了以下几个部分:留言簿标题、"用户名:"标签及输入框、"Email地址:"标签及输入框、"QQ号码:"标签及输入框、"个人主页:"标签及输入框、"留言信息:"标签及输入框、一个"确定"按钮、一个"重置"按钮、一个"查看留言簿"按钮,同时该页面还包括了两个验证按钮,分别用于验证用户名以及Email地址是否为空,若为空,则提醒用户输入。同时,为使留言簿具有良好的用户界面,我运用了表格进行页面布置,这样留言簿中的各个成分就能有条有理,层次分明了。有关该Web页面的详细代码请参考文后附带的源代码,这里就不给出了。页面布置的图示如下:
图1
完成了该Web页面的布置,我们仅仅是完成了一部分的工作,到此为止我们并没有进行过真正的编码。我想大家对ASP.NET中的代码后置技术肯定是了解或熟悉的,它将Web页面的布置工作和后端的编码工作区分开来,达到了良好的分离效果。下面我们就为该Web页面中的三个按钮分别编写消息相应函数:
private void btnOK_Click(object sender, System.EventArgs e)
{
SaveXMLData();
name.Text = "";
email.Text = "";
qq.Text = "";
homepage.Text = "";
comment.Text = "";
}
private void btnReset_Click(object sender, System.EventArgs e)
{
name.Text = "";
email.Text = "";
qq.Text = "";
homepage.Text = "";
comment.Text = "";
}
private void btnView_Click(object sender, System.EventArgs e)
{
// 显示所有用户的留言信息
Response.Redirect( "ViewGuestBook.aspx" );
}
其中,第一个按钮是最重要的,它能将用户的输入信息存储到XML文件中,调用的方法就是SaveXMLData();而第二个按钮仅仅完成文本框的重置清空工作;第三个按钮的作用是运用另一个Web页面显示所有的用户输入信息。同时,第一个按钮在成功保存信息后也会将浏览器导向到显示所有用户输入信息的页面。
下面我们来详细分析一下SaveXMLData()方法,其实现如下:
private void SaveXMLData()
{
try
{
// 创建一个XmlDocument对象,用于载入存储信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));
// 创建一个新的guest节点并将它添加到根节点下
XmlElement parentNode = xdoc.CreateElement( "guest" );
xdoc.DocumentElement.PrependChild( parentNode );
// 创建所有用于存储信息的节点
XmlElement nameNode = xdoc.CreateElement( "name" );
XmlElement emailNode = xdoc.CreateElement( "email" );
XmlElement qqNode = xdoc.CreateElement( "qq" );
XmlElement homepageNode = xdoc.CreateElement( "homepage" );
XmlElement commentNode = xdoc.CreateElement( "comment" );
// 获取文本信息
XmlText nameText = xdoc.CreateTextNode( name.Text );
XmlText emailText = xdoc.CreateTextNode( email.Text );
XmlText qqText = xdoc.CreateTextNode( qq.Text );
XmlText homepageText = xdoc.CreateTextNode( homepage.Text );
XmlText commentText = xdoc.CreateTextNode( comment.Text );
// 将上面创建的各个存储信息的节点添加到guest节点下但并不包含最终的值
parentNode.AppendChild( nameNode );
parentNode.AppendChild( emailNode );
parentNode.AppendChild( qqNode );
parentNode.AppendChild( homepageNode );
parentNode.AppendChild( commentNode );
// 将上面获取的文本信息添加到与之相对应的节点中
nameNode.AppendChild( nameText );
emailNode.AppendChild( emailText );
qqNode.AppendChild( qqText );
homepageNo