国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

ASP.Net+XML打造留言薄

2019-11-18 19:46:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  一.概述:

  留言簿是網(wǎng)站的一個(gè)重要組成部分,是訪問(wèn)者發(fā)表意見(jiàn)的場(chǎng)所,也是網(wǎng)站管理員了解網(wǎng)站基本運(yùn)行情況的有力工具,所以留言簿在現(xiàn)在的網(wǎng)站中扮演了十分重要的角色。

  不過(guò)在以前開發(fā)一個(gè)留言簿并不是一件容易的事,開發(fā)者的工作量往往會(huì)很大。而現(xiàn)在隨著微軟推出VS.NET,相應(yīng)的技術(shù)也推陳出新。特別是xml技術(shù)在.NET Framework中的廣泛運(yùn)用,使得整個(gè).NET構(gòu)架具有十分優(yōu)越的基礎(chǔ)。而asp.net中推出的嶄新的編程模型更使得開發(fā)Web應(yīng)用程序變得非常容易。本文就結(jié)合ASP.NET技術(shù)和XML技術(shù)的優(yōu)點(diǎn)向大家介紹如何打造一個(gè)屬于自己的留言簿。

  二.實(shí)現(xiàn)方法:

  一個(gè)基本的留言簿應(yīng)至少包括兩個(gè)功能:接受用戶輸入的信息并保存該信息到后臺(tái)數(shù)據(jù)庫(kù);顯示用戶輸入的信息。用戶輸入的信息一般包括用戶名、Email地址、QQ號(hào)碼、用戶主頁(yè)、留言信息等,這些信息通常是保存在后臺(tái)數(shù)據(jù)庫(kù)的某個(gè)表中的,不過(guò)本文要運(yùn)用一個(gè)XML文件來(lái)存儲(chǔ)這些信息。顯示用戶輸入的信息時(shí)一般得把所有的信息都顯示出來(lái),這里的方法就是從XML文件中讀取數(shù)據(jù)并運(yùn)用XSLT技術(shù)對(duì)其進(jìn)行格式轉(zhuǎn)換,最后以HTML的形式顯示在瀏覽器中。

  這樣,我們的留言簿就需要兩個(gè)Web頁(yè)面,一個(gè)用于接受用戶的輸入信息,另一個(gè)用于顯示用戶已經(jīng)輸入過(guò)的信息。而存儲(chǔ)信息的XML文件(guestbook.xml)則需具有如下的結(jié)構(gòu):

<?xml version="1.0" encoding="GB2312"?>
<guestbook>
<guest>
<name>令狐沖</name>
<email>doose@etang.com</email>
<qq>10102350</qq>
<homepage>www.doose.com</homepage>
<comment>本留言簿由"令狐沖"創(chuàng)建,希望你能喜歡哦:)要知道如何創(chuàng)建一個(gè)屬于自己的留言簿,那么就請(qǐng)仔細(xì)閱讀《運(yùn)用ASP.NET和XML技術(shù)打造留言簿》一文!</comment>
</guest>
</guestbook>

  下面我們先來(lái)創(chuàng)建用于接受用戶輸入信息的Web頁(yè)面-GuestBook.aspx。根據(jù)前面所提的基本要求,該Web頁(yè)面包括了以下幾個(gè)部分:留言簿標(biāo)題、"用戶名:"標(biāo)簽及輸入框、"Email地址:"標(biāo)簽及輸入框、"QQ號(hào)碼:"標(biāo)簽及輸入框、"個(gè)人主頁(yè):"標(biāo)簽及輸入框、"留言信息:"標(biāo)簽及輸入框、一個(gè)"確定"按鈕、一個(gè)"重置"按鈕、一個(gè)"查看留言簿"按鈕,同時(shí)該頁(yè)面還包括了兩個(gè)驗(yàn)證按鈕,分別用于驗(yàn)證用戶名以及Email地址是否為空,若為空,則提醒用戶輸入。同時(shí),為使留言簿具有良好的用戶界面,我運(yùn)用了表格進(jìn)行頁(yè)面布置,這樣留言簿中的各個(gè)成分就能有條有理,層次分明了。有關(guān)該Web頁(yè)面的詳細(xì)代碼請(qǐng)參考文后附帶的源代碼,這里就不給出了。頁(yè)面布置的圖示如下:

圖1

  完成了該Web頁(yè)面的布置,我們僅僅是完成了一部分的工作,到此為止我們并沒(méi)有進(jìn)行過(guò)真正的編碼。我想大家對(duì)ASP.NET中的代碼后置技術(shù)肯定是了解或熟悉的,它將Web頁(yè)面的布置工作和后端的編碼工作區(qū)分開來(lái),達(dá)到了良好的分離效果。下面我們就為該Web頁(yè)面中的三個(gè)按鈕分別編寫消息相應(yīng)函數(shù):

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" );
}

  其中,第一個(gè)按鈕是最重要的,它能將用戶的輸入信息存儲(chǔ)到XML文件中,調(diào)用的方法就是SaveXMLData();而第二個(gè)按鈕僅僅完成文本框的重置清空工作;第三個(gè)按鈕的作用是運(yùn)用另一個(gè)Web頁(yè)面顯示所有的用戶輸入信息。同時(shí),第一個(gè)按鈕在成功保存信息后也會(huì)將瀏覽器導(dǎo)向到顯示所有用戶輸入信息的頁(yè)面。
  下面我們來(lái)詳細(xì)分析一下SaveXMLData()方法,其實(shí)現(xiàn)如下:

private void SaveXMLData()
{
try
{
// 創(chuàng)建一個(gè)XmlDocument對(duì)象,用于載入存儲(chǔ)信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));

// 創(chuàng)建一個(gè)新的guest節(jié)點(diǎn)并將它添加到根節(jié)點(diǎn)下
XmlElement parentNode = xdoc.CreateElement( "guest" );
xdoc.DocumentElement.PrependChild( parentNode );

// 創(chuàng)建所有用于存儲(chǔ)信息的節(jié)點(diǎn)
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 );

// 將上面創(chuàng)建的各個(gè)存儲(chǔ)信息的節(jié)點(diǎn)添加到guest節(jié)點(diǎn)下但并不包含最終的值
parentNode.AppendChild( nameNode );
parentNode.AppendChild( emailNode );
parentNode.AppendChild( qqNode );
parentNode.AppendChild( homepageNode );
parentNode.AppendChild( commentNode );

// 將上面獲取的文本信息添加到與之相對(duì)應(yīng)的節(jié)點(diǎn)中
nameNode.AppendChild( nameText );
emailNode.AppendChild( emailText );
qqNode.AppendChild( qqText );
homepageNode.AppendChild( homepageText );
commentNode.AppendChild( commentText );

// 保存存儲(chǔ)信息的XML文件
xdoc.Save( Server.MapPath( "guestbook.xml" ));

// 顯示所有用戶的留言信息
Response.Redirect( "ViewGuestBook.aspx" );
}
catch( Exception e ) {}
}

  該方法主要運(yùn)用了XmlDocument類、XmlElement類以及XmlText類等,這些類都是包含在System.Xml命名空間中的,所以請(qǐng)?jiān)诖a文件的開頭處添加using System.Xml的語(yǔ)句。該方法運(yùn)用了一個(gè)try-catch語(yǔ)句塊,在try部分首先通過(guò)創(chuàng)建一個(gè)XmlDocument對(duì)象來(lái)載入XML文件,然后創(chuàng)建根節(jié)點(diǎn)的兒子-guest節(jié)點(diǎn)并在guest節(jié)點(diǎn)下添加存儲(chǔ)信息所必須的五個(gè)子節(jié)點(diǎn)。所有這些子節(jié)點(diǎn)都是XmlElement對(duì)象,它們是通過(guò)XmlDocument對(duì)象的CreateElement()方法來(lái)獲取的。同時(shí),XmlDocument對(duì)象還通過(guò)CreateTextNode()方法來(lái)獲取文本信息并在后面將其添加到相對(duì)應(yīng)的節(jié)點(diǎn)中。在合理的添加guest節(jié)點(diǎn)及其子節(jié)點(diǎn)以及文本信息后,XmlDocument對(duì)象通過(guò)Save()方法將用戶輸入的信息保存到XML文件中。最后,瀏覽器會(huì)導(dǎo)向到顯示所有用戶輸入信息的頁(yè)面。這樣,該Web頁(yè)面運(yùn)行的效果如圖2所示:

圖2

  下面我們來(lái)創(chuàng)建用于顯示所有用戶輸入信息的頁(yè)面-ViewGuestBook.aspx。在該Web頁(yè)面中,我們要運(yùn)用到XSLT技術(shù),它能將前面創(chuàng)建的XML文件中的數(shù)據(jù)以HTML的形式顯示出來(lái)。由于是運(yùn)用XSLT技術(shù)顯示用戶輸入信息的,所以在設(shè)計(jì)該Web頁(yè)面時(shí)我們無(wú)需添加任何Web控件,只要重載該Web頁(yè)面的Load()方法即可。

private void Page_Load(object sender, System.EventArgs e)
{
// 創(chuàng)建一個(gè)XmlDocument對(duì)象以載入存儲(chǔ)信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));

// 創(chuàng)建一個(gè)XslTransform對(duì)象并導(dǎo)入XSL文件
XslTransform xslt = new XslTransform();
xslt.Load( Server.MapPath( "guestbook.xsl" ));

string xmlQuery = "http://guestbook";
XmlNodeList nodeList = xdoc.DocumentElement.SelectNodes( xmlQuery );

MemoryStream ms = new MemoryStream();
xslt.Transform( xdoc, null, ms );
ms.Seek( 0, SeekOrigin.Begin );

StreamReader sr = new StreamReader( ms );

// 顯示輸出結(jié)果
Response.Write( sr.ReadToEnd() );
}

  該方法首先創(chuàng)建一個(gè)XmlDocument對(duì)象用于載入前面創(chuàng)建的XML數(shù)據(jù)文件,之后創(chuàng)建一個(gè)XslTransform對(duì)象并導(dǎo)入相應(yīng)的XSL文件。通過(guò)該XSL文件中的內(nèi)容它能將原來(lái)的XML文件中的數(shù)據(jù)格式化為HTML的形式并顯示在瀏覽器中。因?yàn)槠渲羞\(yùn)用到了XSLT轉(zhuǎn)換,所以我們還得在代碼文件的開頭處添加using System.Xml.Xsl的語(yǔ)句。

  下面便是XSL文件的源代碼,其中最重要的部分是<xsl:template match="name">……</xsl:template>一塊。

<xsl:stylesheet xmlns:xsl="<xsl:template match="/">
<table border="1" style="border-collapse: collapse" bordercolor="Teal" align="center" width="505" height="34">
<tr>
<td valign="middle" align="center" bgcolor="Teal" colspan="2" width="505" height="85">
<font style="color:White;background-color:Teal;font-family:華文行楷;font-size:X-Large;font-weight:bold;">歡迎訪問(wèn)"令狐沖"的留言簿!</font>
</td>
</tr>
<tr><td width="505" height="26" align="left" colspan="2"></td></tr>
<xsl:for-each select="http://guest">
<xsl:apply-templates select="name"/>
</xsl:for-each>
<tr>
<td valign="middle" align="center" colspan="2" width="505">
<font>
本留言簿由<a href="
mailto:0024108@fudan.edu.cn">王凱明</a>開發(fā)! </font>
</td>
</tr>
</table>
</xsl:template>
<xsl:template match="name">
<tr>
<td width="95" height="26" align="right">
<font>用戶名:</font>
</td>
<td width="400" height="26" valign="middle" align="left">
<font><xsl:value-of select='.'/></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right" bgcolor="e0e0e0">
<font>Email地址:</font>
</td>
<td width="400" height="26" valign="middle" align="left" bgcolor="#e0e0e0">
<font><a HREF="mailto:{../email}"><xsl:apply-templates select="../email"/></a></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right">
<font>QQ號(hào)碼:</font>
</td>
<td width="400" height="26" valign="middle" align="left">
<font><xsl:apply-templates select="../qq"/></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right" bgcolor="#e0e0e0">
<font>個(gè)人主頁(yè):</font>
</td>
<td width="400" height="26" valign="middle" align="left" bgcolor="#e0e0e0">
<font><a HREF="http://{../homepage}" target="_blank"><xsl:apply-templates select="../homepage"/></a></font>
</td>
</tr>
<tr>
<td width="95" height="26" valign="top" align="right">
<font>留言信息:</font>
</td>
<td width="400" height="26" valign="top" align="left">
<font><xsl:apply-templates select="../comment"/></font>
</td>
</tr>
<tr><td width="505" height="26" align="left" colspan="2"></td></tr>
</xsl:template>
</xsl:stylesheet>

  這樣,當(dāng)用戶點(diǎn)擊"查看留言簿"按鈕或是成功輸入信息后瀏覽器便導(dǎo)向到該顯示所有用戶輸入信息的Web頁(yè)面,其運(yùn)行效果圖示如下:

圖3

  三.總結(jié):

  這樣,一個(gè)具有基本功能的留言簿就完成了,從中我們可以體會(huì)到運(yùn)用ASP.NET技術(shù)開發(fā)Web應(yīng)用程序是相當(dāng)容易的,同時(shí)在結(jié)合了XML技術(shù)之后,ASP.NET可以變得更加強(qiáng)大。還有文章中介紹的XSLT技術(shù)是非常有用的,你可以參考其它相關(guān)的更多資料以使它成為你開發(fā)過(guò)程中的一個(gè)有力工具。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 惠州市| 筠连县| 新和县| 静安区| 蓬安县| 大关县| 金塔县| 郸城县| 富裕县| 抚宁县| 罗甸县| 巴里| 淳安县| 平顶山市| 建德市| 武夷山市| 会泽县| 如东县| 平湖市| 久治县| 玉龙| 淮南市| 和平县| 二手房| 江陵县| 舞阳县| 渭南市| 临桂县| 永寿县| 信阳市| 兴义市| 舒城县| 玉山县| 德兴市| 建始县| 奈曼旗| 通城县| 凯里市| 阿拉尔市| 平定县| 济南市|