一.概述
留言簿是网站的一个重要组成部分是访问者发表意见的场所也是网站管理员了解网站基本运行情况的有力工具所以留言簿在现在的网站中扮演了十分重要的角色
不过在以前开发一个留言簿并不是一件容易的事开发者的工作量往往会很大而现在随着微软推出VSNET相应的技术也推陈出新特别是XML技术在NET Framework中的广泛运用使得整个NET构架具有十分优越的基础而ASPNET中推出的崭新的编程模型更使得开发Web应用程序变得非常容易本文就结合ASPNET技术和XML技术的优点向大家介绍如何打造一个属于自己的留言簿
二.实现方法
一个基本的留言簿应至少包括两个功能接受用户输入的信息并保存该信息到后台数据库显示用户输入的信息用户输入的信息一般包括用户名Email地址QQ号码用户主页留言信息等这些信息通常是保存在后台数据库的某个表中的不过本文要运用一个XML文件来存储这些信息显示用户输入的信息时一般得把所有的信息都显示出来这里的方法就是从XML文件中读取数据并运用XSLT技术对其进行格式转换最后以HTML的形式显示在浏览器中
这样我们的留言簿就需要两个Web页面一个用于接受用户的输入信息另一个用于显示用户已经输入过的信息而存储信息的XML文件(guestbookxml)则需具有如下的结构
<?xml version= encoding=GB?>
<guestbook>
<guest>
<name>令狐沖</name>
<email>doose@etangcom</email>
<qq></qq>
<homepage>wwwdoosecom</homepage>
<comment>本留言簿由令狐沖创建希望你能喜欢哦)要知道如何创建一个属于自己的留言簿那么就请仔细阅读《运用ASPNET和XML技术打造留言簿》一文!</comment>
</guest>
</guestbook>
下面我们先来创建用于接受用户输入信息的Web页面-GuestBookaspx根据前面所提的基本要求该Web页面包括了以下几个部分留言簿标题用户名标签及输入框Email地址标签及输入框QQ号码标签及输入框个人主页标签及输入框留言信息标签及输入框一个确定按钮一个重置按钮一个查看留言簿按钮同时该页面还包括了两个验证按钮分别用于验证用户名以及Email地址是否为空若为空则提醒用户输入同时为使留言簿具有良好的用户界面我运用了表格进行页面布置这样留言簿中的各个成分就能有条有理层次分明了有关该Web页面的详细代码请参考文后附带的源代码这里就不给出了页面布置的图示如下
图
完成了该Web页面的布置我们仅仅是完成了一部分的工作到此为止我们并没有进行过真正的编码我想大家对ASPNET中的代码后置技术肯定是了解或熟悉的它将Web页面的布置工作和后端的编码工作区分开来达到了良好的分离效果下面我们就为该Web页面中的三个按钮分别编写消息相应函数
private void btnOK_Click(object sender SystemEventArgs e)
{
SaveXMLData();
nameText = ;
emailText = ;
qqText = ;
homepageText = ;
commentText = ;
}
private void btnReset_Click(object sender SystemEventArgs e)
{
nameText = ;
emailText = ;
qqText = ;
homepageText = ;
commentText = ;
}
private void btnView_Click(object sender SystemEventArgs e)
{
// 显示所有用户的留言信息
ResponseRedirect( ViewGuestBookaspx );
}
其中第一个按钮是最重要的它能将用户的输入信息存储到XML文件中调用的方法就是SaveXMLData()而第二个按钮仅仅完成文本框的重置清空工作第三个按钮的作用是运用另一个Web页面显示所有的用户输入信息同时第一个按钮在成功保存信息后也会将浏览器导向到显示所有用户输入信息的页面
下面我们来详细分析一下SaveXMLData()方法其实现如下
private void SaveXMLData()
{
try
{
// 创建一个XmlDocument对象用于载入存储信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdocLoad( ServerMapPath( guestbookxml ));
// 创建一个新的guest节点并将它添加到根节点下
XmlElement parentNode = xdocCreateElement( guest );
xdocDocumentElementPrependChild( parentNode );
// 创建所有用于存储信息的节点
XmlElement nameNode = xdocCreateElement( name );
XmlElement emailNode = xdocCreateElement( email );
XmlElement qqNode = xdocCreateElement( qq );
XmlElement homepageNode = xdocCreateElement( homepage );
XmlElement commentNode = xdocCreateElement( comment );
// 获取文本信息
XmlText nameText = xdocCreateTextNode( nameText );
XmlText emailText = xdocCreateTextNode( emailText );
XmlText qqText = xdocCreateTextNode( qqText );
XmlText homepageText = xdocCreateTextNode( homepageText );
XmlText commentText = xdocCreateTextNode( commentText );
// 将上面创建的各个存储信息的节点添加到guest节点下但并不包含最终的值
parentNodeAppendChild( nameNode );
parentNodeAppendChild( emailNode );
parentNodeAppendChild( qqNode );
parentNodeAppendChild( homepageNode );
parentNodeAppendChild( commentNode );
// 将上面获取的文本信息添加到与之相对应的节点中
nameNodeAppendChild( nameText );
emailNodeAppendChild( emailText );
qqNodeAppendChild( qqText );
homepageNodeAppendChild( homepageText );
commentNodeAppendChild( commentText );
// 保存存储信息的XML文件
xdocSave( ServerMapPath( guestbookxml ));
// 显示所有用户的留言信息
ResponseRedirect( ViewGuestBookaspx );
}
catch( Exception e ) {}
}
该方法主要运用了XmlDocument类XmlElement类以及XmlText类等这些类都是包含在SystemXml命名空间中的所以请在代码文件的开头处添加using SystemXml的语句该方法运用了一个trycatch语句块在try部分首先通过创建一个XmlDocument对象来载入XML文件然后创建根节点的儿子-guest节点并在guest节点下添加存储信息所必须的五个子节点所有这些子节点都是XmlElement对象它们是通过XmlDocument对象的CreateElement()方法来获取的同时XmlDocument对象还通过CreateTextNode()方法来获取文本信息并在后面将其添加到相对应的节点中在合理的添加guest节点及其子节点以及文本信息后XmlDocument对象通过Save()方法将用户输入的信息保存到XML文件中最后浏览器会导向到显示所有用户输入信息的页面这样该Web页面运行的效果如图所示
图
下面我们来创建用于显示所有用户输入信息的页面-ViewGuestBookaspx在该Web页面中我们要运用到XSLT技术它能将前面创建的XML文件中的数据以HTML的形式显示出来由于是运用XSLT技术显示用户输入信息的所以在设计该Web页面时我们无需添加任何Web控件只要重载该Web页面的Load()方法即可
private void Page_Load(object sender SystemEventArgs e)
{
// 创建一个XmlDocument对象以载入存储信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdocLoad( ServerMapPath( guestbookxml ));
// 创建一个XslTransform对象并导入XSL文件
XslTransform xslt = new XslTransform();
xsltLoad( ServerMapPath( guestbookxsl ));
string xmlQuery = //guestbook;
XmlNodeList nodeList = xdocDocumentElementSelectNodes( xmlQuery );
MemoryStream ms = new MemoryStream();
xsltTransform( xdoc null ms );
msSeek( SeekOriginBegin );
StreamReader sr = new StreamReader( ms );
// 显示输出结果
ResponseWrite( srReadToEnd() );
}
该方法首先创建一个XmlDocument对象用于载入前面创建的XML数据文件之后创建一个XslTransform对象并导入相应的XSL文件通过该XSL文件中的内容它能将原来的XML文件中的数据格式化为HTML的形式并显示在浏览器中因为其中运用到了XSLT转换所以我们还得在代码文件的开头处添加using SystemXmlXsl的语句
下面便是XSL文件的源代码其中最重要的部分是<xsl:template match=name>……</xsl:template>一块
<xsl:stylesheet xmlns:xsl=http://wwwworg//XSL/Transform version=>
<xsl:template match=/>
<table border= style=bordercollapse: collapse bordercolor=Teal align=center width= height=>
<tr>
<td valign=middle align=center bgcolor=Teal colspan= width= height=>
<font style=color:White;backgroundcolor:Teal;fontfamily:华文行楷;fontsize:XLarge;fontweight:bold;>欢迎访问令狐沖的留言簿!</font>
</td>
</tr>
<tr><td width= height= align=left colspan=></td></tr>
<xsl:foreach select=//guest>
<xsl:applytemplates select=name/>
</xsl:foreach>
<tr>
<td valign=middle align=center colspan= width=>
<font>
本留言簿由<a href=mailto:@fudaneducn>王凯明</a>开发! </font>
</td>
</tr>
</table>
</xsl:template>
<xsl:template match=name>
<tr>
<td width= height= align=right>
<font>用户名</font>
</td>
<td width= height= valign=middle align=left>
<font><xsl:valueof select=/></font>
</td>
</tr>
<tr>
<td width= height= align=right bgcolor=eee>
<font>Email地址</font>
</td>
<td width= height= valign=middle align=left bgcolor=#eee>
<font><a HREF=mailto:{/email}><xsl:applytemplates select=/email/></a></font>
</td>
</tr>
<tr>
<td width= height= align=right>
<font>QQ号码</font>
</td>
<td width= height= valign=middle align=left>
<font><xsl:applytemplates select=/qq/></font>
</td>
</tr>
<tr>
<td width= height= align=right bgcolor=#eee>
<font>个人主页</font>
</td>
<td width= height= valign=middle align=left bgcolor=#eee>
<font><a HREF=http://{/homepage} target=_blank><xsl:applytemplates select=/homepage/></a></font>
</td>
</tr>
<tr>
<td width= height= valign=top align=right>
<font>留言信息</font>
</td>
<td width= height= valign=top align=left>
<font><xsl:applytemplates select=/comment/></font>
</td>
</tr>
<tr><td width= height= align=left colspan=></td></tr>
</xsl:template>
</xsl:stylesheet>
这样当用户点击查看留言簿按钮或是成功输入信息后浏览器便导向到该显示所有用户输入信息的Web页面其运行效果图示如下
图
三.总结
这样一个具有基本功能的留言簿就完成了从中我们可以体会到运用ASPNET技术开发Web应用程序是相当容易的同时在结合了XML技术之后ASPNET可以变得更加强大还有文章中介绍的XSLT技术是非常有用的你可以参考其它相关的更多资料以使它成为你开发过程中的一个有力工具