狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當(dāng)前位置:系統(tǒng)之家 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

ASP.Net+XML打造留言薄

ASP.Net+XML打造留言薄

更新時(shí)間:2019-09-15 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

  一.概述:

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

  不過在以前開發(fā)一個(gè)留言簿并不是一件容易的事,開發(fā)者的工作量往往會很大。而現(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è)功能:接受用戶輸入的信息并保存該信息到后臺數(shù)據(jù)庫;顯示用戶輸入的信息。用戶輸入的信息一般包括用戶名、Email地址、QQ號碼、用戶主頁、留言信息等,這些信息通常是保存在后臺數(shù)據(jù)庫的某個(gè)表中的,不過本文要運(yùn)用一個(gè)XML文件來存儲這些信息。顯示用戶輸入的信息時(shí)一般得把所有的信息都顯示出來,這里的方法就是從XML文件中讀取數(shù)據(jù)并運(yùn)用XSLT技術(shù)對其進(jìn)行格式轉(zhuǎn)換,最后以HTML的形式顯示在瀏覽器中。

  這樣,我們的留言簿就需要兩個(gè)Web頁面,一個(gè)用于接受用戶的輸入信息,另一個(gè)用于顯示用戶已經(jīng)輸入過的信息。而存儲信息的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è)屬于自己的留言簿,那么就請仔細(xì)閱讀《運(yùn)用ASP.NET和XML技術(shù)打造留言簿》一文!</comment>
</guest>
</guestbook>

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

圖1

  完成了該Web頁面的布置,我們僅僅是完成了一部分的工作,到此為止我們并沒有進(jìn)行過真正的編碼。我想大家對ASP.NET中的代碼后置技術(shù)肯定是了解或熟悉的,它將Web頁面的布置工作和后端的編碼工作區(qū)分開來,達(dá)到了良好的分離效果。下面我們就為該Web頁面中的三個(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è)按鈕是最重要的,它能將用戶的輸入信息存儲到XML文件中,調(diào)用的方法就是SaveXMLData();而第二個(gè)按鈕僅僅完成文本框的重置清空工作;第三個(gè)按鈕的作用是運(yùn)用另一個(gè)Web頁面顯示所有的用戶輸入信息。同時(shí),第一個(gè)按鈕在成功保存信息后也會將瀏覽器導(dǎo)向到顯示所有用戶輸入信息的頁面。
  下面我們來詳細(xì)分析一下SaveXMLData()方法,其實(shí)現(xiàn)如下:

private void SaveXMLData()
{
try
{
// 創(chuàng)建一個(gè)XmlDocument對象,用于載入存儲信息的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)建所有用于存儲信息的節(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è)存儲信息的節(jié)點(diǎn)添加到guest節(jié)點(diǎn)下但并不包含最終的值
parentNode.AppendChild( nameNode );
parentNode.AppendChild( emailNode );
parentNode.AppendChild( qqNode );
parentNode.AppendChild( homepageNode );
parentNode.AppendChild( commentNode );

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

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

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

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

圖2

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

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

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

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<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;">歡迎訪問"令狐沖"的留言簿!</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號碼:</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è)人主頁:</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ùn)行效果圖示如下:

圖3

  三.總結(jié):

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

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
xfplay精品久久| 99久久国产综合精品色伊| 精品亚洲国内自在自线福利| 久久精品国产免费看久久精品| 黄网站免费久久| 最新久久zyz资源站| 亚洲影院免费观看| 国内成人免费视频| 色综合视频一区二区三区高清| 亚洲高清自拍| 亚洲一区图片| 欧美电影免费观看高清完整版在线观看| 精品乱人伦小说| 国产欧美一区二区三区鸳鸯浴| 亚洲精选免费视频| 亚洲一区成人在线| 丁香婷婷综合五月| 一本色道久久| 欧美理论电影在线| 精品国产91乱码一区二区三区 | 成人中文字幕合集| 欧美日韩电影在线播放| 国产精品美女久久久久aⅴ| 舔着乳尖日韩一区| 亚洲高清在线播放| 国产欧美视频一区二区| 国产伦精一区二区三区| 香蕉国产精品偷在线观看不卡| 国产欧美精品区一区二区三区 | 精品国产乱码久久久久久1区2区| 日韩成人dvd| 99国产精品私拍| 中文字幕av一区二区三区高| 韩国三级中文字幕hd久久精品| 男女av一区三区二区色多| 国产精品久久久久久久久搜平片| 成人三级伦理片| 欧美精品精品一区| 免费观看久久久4p| 亚洲欧美日本日韩| 一区二区三区四区蜜桃| 狠狠干成人综合网| 日本一区二区久久| 午夜欧美精品久久久久久久| 日韩欧美色综合网站| 极品美女销魂一区二区三区免费| 久久久噜噜噜久久狠狠50岁| 一区二区三区小说| 亚洲久久视频| 亚洲男人的天堂一区二区| 欧美特黄一级| 国产精品欧美经典| 欧美一区高清| 亚洲国产精品国自产拍av| 欧美在线1区| 亚洲国产精品国自产拍av| 欧美久久电影| 国产精品视频观看| 亚洲激情啪啪| 一区二区不卡在线播放 | 国内精品免费**视频| 欧美无人高清视频在线观看| 日本不卡123| 欧美伊人精品成人久久综合97| 肉肉av福利一精品导航| 久久一二三四| 美女诱惑一区二区| 欧美日韩成人综合| 高清成人免费视频| 精品对白一区国产伦| 91美女片黄在线观看91美女| 国产日韩精品一区二区三区在线| 欧美日韩1区2区3区| 中文字幕中文字幕中文字幕亚洲无线| 亚洲午夜精品久久久久久浪潮| 亚洲图片你懂的| 西西裸体人体做爰大胆久久久| 日韩**一区毛片| 欧美精品777| 99久久婷婷国产| 亚洲视频网在线直播| 香蕉精品999视频一区二区 | 91麻豆精品国产91久久久久| 成人免费观看视频| 中文字幕视频一区二区三区久| 国产欧美综合一区二区三区| 日本不卡视频一二三区| 日韩欧美综合在线| 激情欧美亚洲| 日韩av午夜在线观看| 日韩欧美精品在线| 国产精品久久7| 亚洲1区2区3区4区| 91精品国产综合久久久久| 午夜视频一区| 日日夜夜精品视频免费| 日韩亚洲欧美一区| 亚洲国产精品久久久久婷婷老年| 五月综合激情网| 精品国产一区二区三区av性色| 极品日韩久久| 久久精品国产精品青草| 国产天堂亚洲国产碰碰| 免费日韩视频| av成人老司机| 亚洲国产精品久久一线不卡| 91精品国产一区二区三区蜜臀| 狠狠干综合网| 久久福利视频一区二区| 国产精品狼人久久影院观看方式| 欧美一级播放| 91女厕偷拍女厕偷拍高清| 亚洲一区二区在线观看视频| 91.com在线观看| 最近看过的日韩成人| 国产一区三区三区| 亚洲综合清纯丝袜自拍| 精品久久久久久久一区二区蜜臀| 亚洲一区欧美激情| 91污在线观看| 精品一区二区三区免费| 亚洲色欲色欲www在线观看| 亚洲动漫第一页| 日韩免费一区二区三区在线播放| 亚洲一区免费| 亚洲午夜电影| 不卡电影免费在线播放一区| 偷拍亚洲欧洲综合| 国产精品高潮久久久久无| 日韩一区二区三区电影| 另类激情亚洲| 欧美日韩1区| 成人午夜精品一区二区三区| 日韩电影免费在线看| 亚洲欧洲成人精品av97| 日韩精品一区二区三区视频在线观看 | 91精品国产综合久久香蕉麻豆 | 国产精品18久久久久久vr| 亚洲午夜精品久久久久久久久| 久久久久综合网| 欧美日韩亚洲综合在线| 亚洲欧美成人综合| 欧美午夜不卡影院在线观看完整版免费| 国产最新精品免费| 琪琪久久久久日韩精品| 亚洲一区影音先锋| 中文字幕一区免费在线观看| 精品国产91乱码一区二区三区| 欧美日韩一区成人| 色素色在线综合| 午夜一区二区三视频在线观看 | 久久成人久久鬼色| 视频一区二区三区入口| 亚洲国产色一区| 亚洲精品国产精品乱码不99| 国产精品剧情在线亚洲| 国产婷婷色一区二区三区| 精品国产免费视频| 日韩一区二区在线看片| 在线视频一区二区三| 久久在线视频| 久久综合狠狠| 色综合久久久久久久| 色哟哟日韩精品| 一本色道久久综合狠狠躁的推荐| 亚洲一区二区三区欧美| 亚洲欧美日产图| 久久中文欧美| 欧美天天综合网| 欧美日韩1234| 4438x成人网最大色成网站| 欧美人与z0zoxxxx视频| 欧美丰满美乳xxx高潮www| 91精品国产综合久久久久久久 | 日本高清不卡aⅴ免费网站| 色偷偷久久人人79超碰人人澡| 久久综合一区| 欧美日韩一区二区三区在线 | 激情综合自拍| 国产精品午夜av在线| 久久综合福利| 在线播放中文一区| 日韩欧美激情四射| 国产欧美一区二区在线| 国产精品久久精品日日| 亚洲黄色小说网站| 美国欧美日韩国产在线播放| 国产一区二区中文字幕| 成人avav影音| 一区精品久久| 久久成人一区| 91精品国产色综合久久不卡蜜臀| 欧美电影精品一区二区| 国产欧美精品一区二区三区四区| 亚洲天堂免费看| 日韩高清欧美激情| 国产传媒日韩欧美成人| 欧美国产另类| 久久国产主播| 欧美成人激情免费网|