




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第29 制作一個(gè)ASP.NET校友錄系開(kāi)發(fā)以及軟件。1. 2. 3. ASP.NET校友錄系統(tǒng)而言,其作用是為了增加同學(xué)之間的友情,在需求分析文檔的引言部分的與家人和朋友發(fā)送消息,但是無(wú)法與家人和朋友生活和等。Web應(yīng)用,也有WebQQ空間、博客、個(gè)人日志等,都是基于瀏為了解決C/S模式的應(yīng)用程序志、、音樂(lè)等難以交互的情況,現(xiàn)開(kāi)發(fā)ASP.NET校友錄系統(tǒng)用于進(jìn)行校友之間的交流和通信方便校友與校友之間進(jìn)行通信校友與校友之間不僅能夠日志,還能夠進(jìn)行身邊信息的,這樣就加強(qiáng)了人與人之間的交互。現(xiàn)開(kāi)發(fā)基于.NET平臺(tái)的校友錄應(yīng)用程序,用戶(hù)能夠使用校友錄進(jìn)行信息的通信和,不僅能夠加強(qiáng)ASP.NETASP.NET校友錄系統(tǒng)可以為現(xiàn)有學(xué)校所使用,也可以被班級(jí)或個(gè)人進(jìn)行使用,適用性廣泛,能夠在校友錄中進(jìn)行新鮮事的。在ASP.NET校友錄系統(tǒng)的開(kāi)發(fā)過(guò)程中需要確定基本的系統(tǒng)功能,用戶(hù)功當(dāng)用戶(hù)Web頁(yè)面時(shí)需要進(jìn)行,如果用戶(hù)不進(jìn)行就不能夠和回復(fù)留言,也不能用戶(hù)之后就需要實(shí)現(xiàn)用戶(hù)的登錄登錄的用戶(hù)可以進(jìn)行信息的回復(fù)以及相應(yīng)內(nèi)容的。ID進(jìn)行校友錄中的功能或文章的索引。用戶(hù)可以查看校友錄志并進(jìn)行相應(yīng)的評(píng)論,不僅如此,用戶(hù)還能夠在回復(fù)中發(fā)布表情,進(jìn)行文當(dāng)用戶(hù)后,需要對(duì)用戶(hù)進(jìn)行的審核,管理員可以審核已知的用戶(hù)的,如果用戶(hù)不是校有權(quán)進(jìn)行修改、和刪除等操作。管理員需要對(duì)校友發(fā)布的相應(yīng)的留言進(jìn)行管理,如果校友發(fā)布了、黃色、穢或的留言,當(dāng)用戶(hù)進(jìn)行了操作或者用戶(hù)后發(fā)布了太多的、黃色、穢等內(nèi)容,管理員可以將用戶(hù)ASP.NET29-1所示。操作。對(duì)于用戶(hù)而言,用戶(hù)在ASP.NET校友錄中必須要進(jìn)行和登錄操作,如果用戶(hù)不進(jìn)行登錄操圖29-1ASP.NET校友錄系統(tǒng)模塊劃 圖29-2用戶(hù)登錄模塊流程如果管理員對(duì)用戶(hù)進(jìn)行了審核并通過(guò)相應(yīng)的用戶(hù),則說(shuō)明用戶(hù)是一個(gè)可以被認(rèn)為是真實(shí)的用戶(hù),那29-3正如圖29-3所示,管理員在進(jìn)行操作時(shí)同樣需要對(duì)管理員進(jìn)行驗(yàn)證,由于管理員也是用戶(hù)的作,如果有管理權(quán)限,管理員就能夠在進(jìn)行相應(yīng)的管理操作。ASP.NETASP.NET留言本更加的復(fù)雜,在數(shù)據(jù)庫(kù)設(shè)計(jì)上也更加復(fù)雜,不同的表之間還包考慮到數(shù)據(jù)的約束和完整性約束以便數(shù)據(jù)庫(kù)的。校友錄包含了的功能,這些功能都能夠讓校友用戶(hù)在上自己的、音樂(lè)、等,所以29-4所示。29-4用戶(hù)表:用于存放用戶(hù)的信息,以便登錄時(shí)使用公告信息表:管理員可以在校友錄中發(fā)布的信息ASP.NET校友錄系統(tǒng)中最為重要的就是日志表和與之相關(guān)的表,用戶(hù)在校友錄系統(tǒng)中主要通過(guò)日志進(jìn)行信息交換和。其志表的字段可以歸納如下。日志:日志,用于顯示日志發(fā)布的日期日志內(nèi)容:日志內(nèi)容,用于呈現(xiàn)日志的內(nèi)容,包括音樂(lè)、等信息日志閱讀次數(shù):用于表示閱讀被的次數(shù)IDID而暫時(shí)關(guān)閉對(duì)其他文章的瀏覽。模塊面的章節(jié)中都有設(shè)計(jì),這里同樣需要模塊,模塊:用于保存用戶(hù)的,當(dāng)用戶(hù)使用登錄時(shí)可以通過(guò)驗(yàn)證:用于保存用戶(hù)的用戶(hù)情況:用于保存用戶(hù)的狀態(tài),可以設(shè)置為通過(guò)和未通過(guò)等與前面的用戶(hù)不同的是,這里多了一個(gè)用戶(hù)權(quán)限字段,由于管理員也能夠進(jìn)行普通的用戶(hù)的操I(mǎi)DIDIDIDIDSQLServerManagementStudioSQLServerManagementStudioSQL語(yǔ)句進(jìn)行創(chuàng)建。在創(chuàng)建日志表之前首先需要?jiǎng)?chuàng)建friends數(shù)據(jù)庫(kù),創(chuàng)建完成后就能夠進(jìn)行其中的表的創(chuàng)建。在ASP.NET29-529-6圖29-5日志表結(jié) 圖29-6日志分類(lèi)表結(jié)time:日志,用于顯示日志發(fā)布的日期marksUSE[friends]SETANSINULLSUSE[friends]SETANSINULLSONSETQUOTEDIDENTIFIERONCREATETABLE[id][int]IDENTITY(1,1)NOT[title][nvarchar](500)COLLATE[author][nvarchar](50)COLLATE[time][datetime]NULL,[content][nvarchar](max)[marks][int]PRCCIASNULL,PRCCIASNULL,PRCCIAS ][int]NULL,[userid][int]NULL,[hits][int]NULL,CONSTRAINT[PKdiary]PRIMARYKEY([id])WITH(PADINDEX=OFF,STATISTICS PUTE=OFF,IGNOREDUPKEY=OFF,ALLOWROWLOCKS=ON,ALLOWPAGELOCKS=ON)ON[PRIMARY])ONUSE[friends]SETUSE[friends]SETANSINULLSONSETQUOTEDIDENTIFIERONCREATETABLE[id][int]IDENTITY(1,1)NOT[classname][nvarchar](50)PRCCIASCONSTRAINT[PKdiaryclass]PRIMARYKEY([id])WITH(PADINDEX=OFF,STATISTICS PUTE=OFF,IGNOREDUPKEY=OFF,ALLOWROWLOCKS=ON,ALLOWPAGELOCKS=ON)ON[PRIMARY])ONUSE[friends]SETANSINULLSUSE[friends]SETANSINULLSONSETQUOTEDIDENTIFIERONCREATETABLE[id][int]IDENTITY(1,1)NOT[title][nvarchar](500)COLLATE[time][datetime]NULL,[content][nvarchar](max)COLLATE[userid][int]NULL,[diaryid][int]PRCCIASPRCCIASCONSTRAINT[PKdiarygbook]PRIMARYKEY([id])WITH(PADINDEX=OFF,STATISTICS PUTE=OFF,IGNOREDUPKEY=OFF,ALLOWROWLOCKS=ON,ALLOWPAGELOCKS=ON)ON[PRIMARY])ON在用戶(hù)中,增加了對(duì)管理員驗(yàn)證的字段,用戶(hù)表字段如下所示IMQQ/MSNSQL查詢(xún)語(yǔ)句代碼如下所示。USE[friends]SETANSINULLSONUSE[friends]SETANSINULLSONSETQUOTEDIDENTIFIERONCREATETABLE[id][int]IDENTITY(1,1)NOT[username][nvarchar](50)COLLATE[password][nvarchar](50)PRCCIASPRCCIAS ][int][picture][nvarchar](max)COLLATE PRCCIASNULL,[IM][nvarchar](50)COLLATE PRCCIASNULL,[information][nvarchar](max)COLLATE PRCCIASNULL,[others][nvarchar](max)COLLATE PRCCIASNULL,[ifisuser][int]NULL,[userroot][int]CONSTRAINT[PKRegister]PRIMARYKEY([id])WITH(PADINDEX=OFF,STATISTICS PUTE=OFF,IGNOREDUPKEY=OFF,ALLOWROWLOCKS=ON,ALLOWPAGELOCKS=ON)ON[PRIMARY])ON
圖29-7表結(jié)公告數(shù)據(jù)可以不使用數(shù)據(jù)庫(kù)進(jìn)行,在這里可以使用txt文檔進(jìn)行數(shù)據(jù),這樣不僅可以減輕HTMLServerManagementStudioASP.NET同學(xué)錄系統(tǒng)中,包括一些數(shù)據(jù)約束用于保持?jǐn)?shù)據(jù)29-8所示。29-829-8中說(shuō)明了數(shù)據(jù)庫(kù)表之間的關(guān)系,進(jìn)行表之間數(shù)據(jù)的約束。當(dāng)進(jìn)行數(shù)據(jù)插入時(shí),就會(huì)判斷數(shù)SQL語(yǔ)句也會(huì)相應(yīng)的更改,就HTML編輯器進(jìn)行富文本編寫(xiě)和呈現(xiàn)。同樣為了簡(jiǎn)化數(shù)據(jù)操作,也可以使SQLHelper類(lèi)進(jìn)行數(shù)據(jù)操作。FckeditorHTMLFckeditorWord一樣進(jìn)行頁(yè)面排版和布局,F(xiàn)ckeditor還能夠使用表情、進(jìn)行拼寫(xiě)檢查等。Fckeditor進(jìn)行文本提交是因?yàn)樵诹粞员鞠到y(tǒng)中不需要進(jìn)行復(fù)雜HTMLFckeditorFckeditor-FckeditorFckeditor進(jìn)行文本框制作和二次開(kāi)發(fā)。在項(xiàng)目中添加Fckeditor的,首先需要將Fckeditor文件夾拷貝到項(xiàng)目中。由于ASP.NET應(yīng)用程29-9所示。FckeditorFckeditor文件夾,選擇【添加到項(xiàng)目】29-10所示。圖29-9顯示所有文 圖29-10添加添加文件后還需要添加相應(yīng)的DLL文件以便在程序開(kāi)發(fā)中使用Fckeditor編輯器進(jìn)行文本框開(kāi)發(fā)。右擊現(xiàn)有項(xiàng)目在下拉菜單中選【添加現(xiàn)有項(xiàng)選項(xiàng)在中選【瀏覽選項(xiàng)卡找【附-Fckeditor 中的bin 并添加到項(xiàng)目中,如圖29-11所示。添加后就能夠在開(kāi)發(fā)中使用Fckeditor編輯器進(jìn)行富文本編輯,開(kāi)發(fā)人員還能夠在中添Fckeditor編輯器。單擊【工具箱】的空白區(qū)域,單擊右鍵,在下拉菜單中選擇【選擇項(xiàng)】選項(xiàng),選擇剛才添加的DLL文件。選擇后單擊【確定】按鈕即可添加控件。控件添加完畢后就會(huì)在中呈29-12所示。 圖29-11添加圖29-12添加后的Fckeditor編輯器控<formid="form1"<formid="form1"Fckeditor29-1329-13FckeditorFckeditorHTML編輯器會(huì)花費(fèi)Fckeditor編輯器能夠進(jìn)行樣式的布局、文本格式化等操作而無(wú)需從頭進(jìn)行開(kāi)發(fā)。對(duì)于Fckeditor編輯器而言,F(xiàn)ckeditor編輯器是免費(fèi)和開(kāi)源的,開(kāi)發(fā)人員能夠免費(fèi)的Fckeditor編輯器ASP.NETSQLHeplerADO.NET配置<addkey="server"<addkey="database"<addkey="uid"<addkey="server"<addkey="database"<addkey="uid"<addkey="pwd"<addkey="look"http://server//guestbook//uid//pwd//look通過(guò)ConfigurationManager.AppSettingsSQLHelper類(lèi)中就使用ConfigurationManager.AppSettingsserver:serverdatabase:databaseuid:uidpwd:pwd項(xiàng),用于配置數(shù)據(jù)庫(kù)服務(wù)器的look:lookWeb.config中<appSettings/>配置節(jié)的參數(shù)值。在ASP.NET校友錄系統(tǒng)中使用了Fckeditor以及SQLHelper簡(jiǎn)化了HTML編輯器的開(kāi)發(fā)和數(shù)據(jù)操作,用戶(hù)實(shí)頁(yè)面HTML代碼見(jiàn)光盤(pán)中源代碼\第29章\29-1\29-1\register.aspx。登錄操作,如果用戶(hù)沒(méi)有用戶(hù)惟一則必須先進(jìn)行,頁(yè)面如圖29-14所示。圖29-14頁(yè)protectedvoidButton1Click(objectsender,EventArgs{{string="insertintoregister(username,password, values('"+TextBox1.Text+"','"+TextBox2.Text+"','"+DropDownList1.Text+"','"+TextBox3.Text+"','"+TextBox4.Text+"','"+TextBox5.Text+"','"+TextBox6.Text+"',0,0)"; //SQL }{ }}當(dāng)用戶(hù)執(zhí)行后,如果成功系統(tǒng)就會(huì)跳轉(zhuǎn)到登錄頁(yè)面進(jìn)行登錄操作,如果沒(méi)有成功(拋出異常),則系統(tǒng)會(huì)認(rèn)定用戶(hù)執(zhí)行了操作,會(huì)跳轉(zhuǎn)到首頁(yè)。在進(jìn)行時(shí),默認(rèn)情況下ifisuser字段為0,用戶(hù)后并不能夠立即通過(guò),需要管理員進(jìn)行驗(yàn)證。于前面已經(jīng)講解了很多關(guān)于的操作,這里就不再詳細(xì)講解如何實(shí)現(xiàn)用戶(hù)登錄操作面的章節(jié)中講的非常的多,并且在模塊篇中還詳細(xì)的介紹了用戶(hù)登錄模塊的開(kāi)HTML核心代碼見(jiàn)光盤(pán)中源代碼\29章\29-1\29-1\login.aspx。用戶(hù)完成后就會(huì)跳轉(zhuǎn)到登錄頁(yè)面,登錄頁(yè)面能夠給用戶(hù)配置相應(yīng)的Session對(duì)象以用戶(hù)狀29-15所示。29-15protectedvoidButton1Click(objectsender,protectedvoidButton1Click(objectsender,EventArgs{stringstrsql="select*fromregisterwhereusername='"+TextBox1.Text+"'andpassword='"TextBox2.Text+SqlDataReadersdr=SQLHelper.SQLHelper.ExecReader(strsql);if(sdr.Read()){Session["username"]=TextBox1.Text;Session["userid"]=sdr["id"].ToString();Session["admin"]=sdr["userroot"].ToString();}{////////用戶(hù)////Label1.Text="無(wú)法登錄,用戶(hù)名 錯(cuò)誤 //提示錯(cuò)誤登}}29-16所示。29-1629-16551logo4:顯示發(fā)布的日志5:顯示加入的同學(xué),最熱門(mén)的日志等等的同學(xué)等在頁(yè)面進(jìn)行數(shù)據(jù)呈現(xiàn)的自定義控件并沒(méi)有多大的難度但是自定義控件能夠方便開(kāi)發(fā)和,namespacenamespace{[ToolboxData("<{0}:MyadminspublicclassMyadmins://{{protectedoverridevoidRenderContents(HtmlTextWriter{{StringBuilderstr=newStringBuilder(); //使用Stringstringstrsql="select*fromregisterwhereuserroot=1orderbyiddesc"; //創(chuàng)建SQL語(yǔ)句SqlDataReadersdr=SQLHelper.SQLHelper.ExecReader(strsql); while(sdr.Read()) {str.Append("<spanstyle=\"color:white\"><ahref=\"userindex.aspx?uid="+sdr["id"]+sdr["username" } }{ }}}}namespace{[ToolboxData("<{0}:NewFriendsrunat=server></{0}:NewFriends>")]publicclassNewFriends:WebControlnamespace{[ToolboxData("<{0}:NewFriendsrunat=server></{0}:NewFriends>")]publicclassNewFriends:WebControl{protectedoverridevoidRenderContents(HtmlTextWriter{{StringBuilderstr=new////stringstrsql"selecttop10*fromregisterwhereuserroot=0orderbyid //SqlDataReadersdr=SQLHelper.SQLHelper.ExecReader(strsql); while //遍歷對(duì){str.Append("<spanstyle=\"color:white\"><ahref=\"userindex.aspx?uid="+sdr["id"]+sdr["username //} //}{ //}}}}}<div<imgsrc="images/logo.png"29.5.3中的可以作為頁(yè)面布局的規(guī)范,頁(yè)面布局人員能夠使用該<div<imgsrc="images/logo.png"logoHTML<div呈現(xiàn)。在顯式了logo之后,就需要呈現(xiàn)banner。banner的樣式在CSS文件中進(jìn)行編寫(xiě),在實(shí)<div在實(shí)現(xiàn)了banner后,就需要實(shí)現(xiàn)校友錄頁(yè)面中最重要的頁(yè)面,即center內(nèi)的內(nèi)容center中包括main_board、main_site以及main_right,示例代碼見(jiàn)光盤(pán)中源代碼\第29<divxx<divxxGridView控件和自定義控件,GridView控件主要是用于呈現(xiàn)日志數(shù)據(jù),其HTML編輯器進(jìn)行富文本編輯,這樣就提高了交互性。對(duì)于用戶(hù)而言,也能夠使用HTML編輯器編寫(xiě)豐富的內(nèi)容,包括音樂(lè)和文件上傳。日志發(fā)布頁(yè)面只需要將數(shù)據(jù)插入到相應(yīng)的表即可,日志發(fā)布頁(yè)面示例HTML代碼見(jiàn)光盤(pán)中源代碼\第29章protectedvoidButton1_Click(objectprotectedvoidButton1_Click(objectsender,EventArgsprotectedvoidPage_Load(objectsender,EventArgsprotectedvoidPage_Load(objectsender,EventArgs{if(Session["username"]==null||Session["userid"]=={}}////{{stringstrsql="insertintodiary(title,author,time,content,marks,cla ,userid,hits)values('"+TextBox1.Text+"','"+Session["username"].ToString()+"','"+DateTime.Now+"','"+FCKeditor1.Value+"',0,"+DropDownList1.Text+",'"+Session["userid"].ToString()+"',0)"; //SQL////}{Label3.Text="出現(xiàn)錯(cuò)誤,請(qǐng)檢查日志 //提示錯(cuò)誤信}}HTML代碼,日志修改頁(yè)面中的控件基protectedprotectedvoidPage_Load(objectsender,EventArgs{if{if(Session["username"]==null||Session["userid"]=={}{stringstrsql="select*fromdiarywhereid='"+Request.QueryString["id"]+"'";SqlDataReadersdr=SQLHelper.SQLHelper.ExecReader(strsql); //編寫(xiě)SQLif(sdr.Read()) {if(sdr["userid"].ToString()==||||Session["admin"].ToString()=={TextBox1.Text=sdr["title"].ToString();Label1.Text=sdr["author"].ToString();Label2.Text=sdr["time"].ToString();FCKeditor1.Value=DropDownList1.Text= }{}}{}}}}UPDATE語(yǔ)句對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行更改,示例代碼如下所示。protectedprotectedvoidButton1Click(objectsender,EventArgs{{stringstrsql="updatediarysettitle='"+TextBox1.Text+"',content='"+FCKeditor1.Value+"'hereid='"+Request.QueryString["id"]+ Response.Redirect("news?id="+}{Label3.Text="出現(xiàn)錯(cuò)誤,請(qǐng)檢查日志 //拋出異}}UPDATE語(yǔ)句的執(zhí)行就能夠執(zhí)行更新,更新完成后可以跳轉(zhuǎn)userroot1HTML頁(yè)面的呈現(xiàn),只需要進(jìn)行相應(yīng)的邏輯實(shí)現(xiàn) protectedvoidPage_Load(objectsender,EventArgs {{if(Session["admin"]=={}{if(Session["admin"].ToString()=={stringstrsql="deletefromdiarywhereid='"+Request.QueryString["id"]+ }{Response.Redirect("errors/cdelete.aspx?id="+}}}HTML代碼基本同日志發(fā)布頁(yè)面相同,而各個(gè)模塊根據(jù)其顯示的效果而不同。HTML代碼見(jiàn)光盤(pán)中源代碼\29章\29-1\29-1\shownew.aspx。DataListSqlDataSourceidHTML代碼見(jiàn)光盤(pán)中源代碼\29章\29-1\29-1\shownew.aspx。HTML格式輸出。當(dāng)用戶(hù)閱讀日志后并希望能夠章\29-1\29-1\shownew.aspx。當(dāng)用戶(hù)填寫(xiě)完成標(biāo)題和內(nèi)容后就能夠通過(guò)按鈕控件進(jìn)行評(píng)論的提交,評(píng)論protectedprotectedvoidButton1_Click(objectsender,EventArgs{stringstrsql="insertintodiarygbook(title,time,content,userid,diaryid)values Response.Redirect("shownew.aspx?id="+Request.QueryString["id"]);}而且校友和管理員都能夠進(jìn)行用戶(hù)索引的查看用戶(hù)索引頁(yè)面HTML代碼見(jiàn)光盤(pán)中源代碼\第29protectedvoidPage_Load(objectprotectedvoidPage_Load(objectsender,EventArgs{if(Session["admin"]=={}{if(Session["admin"].ToString()=={////stringstrsql="deletefromdiarywhereuserid='"+Request.QueryString["uid"]+stringstrsql1deletefromdiarygbookwhereuserid='"Request.QueryString["uidstringstrsql2="deletefromregisterwhereid='"+Request.QueryString["uid"]+"'"; // }{Response.Redirect("errors/cdelete.aspx?id="+}}}超樣式優(yōu)超樣式是用戶(hù)體驗(yàn)優(yōu)化中一個(gè)非常簡(jiǎn)單卻非常重要的部分。超顯示著不同連接之間的樣式,用戶(hù)能夠通過(guò)超進(jìn)行跳轉(zhuǎn)。單擊【F5】快捷鍵運(yùn)行現(xiàn)有的應(yīng)用程序,如圖29-17所示。29-17{text-decoration:none;color:#3b5888;}{text-decoration:none;color:#3b5888;}{{text-decoration:none;color:#3b5888;}{text-decoration:none;color:#3b5888;}{text-decoration:none;color:#3b5888;} 鼠標(biāo)移動(dòng)樣式{{background:}上述代碼使用了超文本控制樣式進(jìn)行樣式控制其中包括了a:linka:activea:visited和a:hover。.main.mainright{text-decoration:none;color:#3b5888;}.mainright{text-decoration:none;color:#3b5888;}.mainright{text-decoration:none;color:#3b5888;}.mainright{}main_right是樣式表中用于控制側(cè)邊欄的樣式。在校友錄系統(tǒng)中,系統(tǒng)希望右側(cè)的邊欄的超樣在定義了一個(gè)全局超文本樣式后,全局的超文本樣式都會(huì)被更改成全局樣式,如圖29-所示。而局部定義的超文本樣式會(huì)被局部樣式覆蓋,如圖29-19所示圖29-18全局樣 圖29-19局部樣publicpartialclassdefault:{protectedpublicpartialclassdefault:{protectedvoidPageLoad(objectsender,EventArgs{}}Web系統(tǒng)時(shí),通常需要通過(guò)導(dǎo)航欄進(jìn)行應(yīng)用程序功能的查找。校友錄系統(tǒng)的導(dǎo)航欄同樣需要編寫(xiě)事務(wù)邏輯判斷以便不同權(quán)限的用戶(hù)查看的信息是不相同普通校友:該用戶(hù)是普通校友,該用戶(hù)能夠進(jìn)行日志的和用戶(hù)信息的索引js相同的功能的實(shí)現(xiàn)。js文件示例代碼如下所示。if(Session["admin"].ToString()=={.write('<divstyle="margin:5px5px5px5px;padding:5px5px5px5px;border:1pxdashed.write('<imgalt=""src="../images/groups.png"style="width:16px;height:16px"你好Response.Write(Session["username"].ToString<imgalt=""src="../images/gift.png"style="width:16px;height:16px"/>你 <ahref="admin/default.aspx"><spanstyle="color:Red">管理員 .write('<br/><imgalt=""src="../images/list.png"style="width:16px;height:16px"<ahref="../logout.aspx">注銷(xiāo) }{.write('<divstyle="margin:5px5px5px5px;padding:5px5px5px5px;border:1pxdashed.write('<imgalt=""src="../images/groups.png"style="width:16px;height:16px"你好:<%Response.Write(Session["username"].ToString());%><br/><imgalt=""src="../images/gift.png"style="width:16px;height:16px"/>你的 是<spanstyle="color:Red">普通用戶(hù)</span>& .write('<br/><img.write('<br/><imgalt=""src="../images/list.png"style="width:16px;height:16px"<ahref="../logout.aspx">注銷(xiāo) }29-2029-2129-20用戶(hù)信息導(dǎo)航欄29-21<div<divclass="main<scriptsrc="js/banner.aspx"jsjs導(dǎo)航信息。js導(dǎo)航并不局限于頁(yè)面或功能的導(dǎo)航,在很多情況下,js導(dǎo)航還能夠制作用戶(hù)控制面板頁(yè)頭頁(yè)尾等通用模塊、、、、用模塊的編寫(xiě),這樣不僅能夠在多個(gè)頁(yè)面中使用,也方便了系統(tǒng)的。但如果在中大量的使用頁(yè)面進(jìn)行邏輯判斷,也可能會(huì)造能問(wèn)題AJAXAJAX進(jìn)行無(wú)刷新實(shí)現(xiàn),示例代碼見(jiàn)光盤(pán)中源代碼\第29章\29-1\29-1\shownew.aspx。碼\29章\29-1\29-1\shownew.aspx中數(shù)據(jù)源的配置。AJAX應(yīng)用中也是非常重要的。當(dāng)用AJAX進(jìn)行頁(yè)面局部更新就不需要DataBind方法進(jìn)行數(shù)據(jù)綁定,示例代碼如下所示。protectedprotectedvoidButton1Click(objectsender,EventArgs{stringstrsql="insertintodiarygbook(title,time,content,userid,diaryid)valuesstringstrsql="insertintodiarygbook(title,time,content,userid,diaryid)values DataList2.DataSourceID=}DataBind方法進(jìn)行數(shù)據(jù)重綁定。當(dāng)執(zhí)行了數(shù)據(jù)重綁定后,數(shù)據(jù)綁定控件將能夠直29-22所示。29-22TextBox1.TextTextBox1.Text=TextBox2.Text=ASP.NETAJAX的封裝,AJAXAJAXAJAX同樣,在Web應(yīng)用程序中也可以使用表情,最常見(jiàn)的就是、博客和評(píng)論了,如圖29-24所示。在校友錄系統(tǒng)中,只有正文能夠使用表情,而該表情是通過(guò)Fckeditor進(jìn)行實(shí)現(xiàn)的。為了讓校友錄系統(tǒng)C#js共同實(shí)現(xiàn)表情功能。 圖29-23QQ表 圖29- 應(yīng)用表
29-2529-25所示,微笑的表情是字符“”。當(dāng)用戶(hù)單擊【笑臉】表情時(shí),首先笑臉表情會(huì)轉(zhuǎn)義成字符串“:)”呈現(xiàn)在文本框控件中。表情可以使用按鈕控件進(jìn)行呈現(xiàn),當(dāng)單擊相應(yīng)的【表情】按JavaScript進(jìn)行按鈕控件的模擬。項(xiàng),在彈出菜單中選擇【JScript29-26所示。29-26新建JScriptfunction{varstr=} function{varstr=} ;JavaScript創(chuàng)建了一個(gè)添加表情函數(shù),其過(guò)程非常簡(jiǎn)單。該函數(shù)擁有一個(gè)參數(shù),這查找后會(huì)將傳遞的字符串添加到相應(yīng)的文本框控件中。編寫(xiě)了函數(shù)后就需要在頁(yè)面中進(jìn)行函數(shù)的, <scriptsrc="js/JScript1.js" 上述代碼了一個(gè)JavaScript頁(yè)面的,當(dāng)了該JavaScript頁(yè)面后,該頁(yè)面的就能夠使用該頁(yè)面提供的函數(shù)。在表情的呈現(xiàn)過(guò)程中,使用控件或按鈕控件都是不合適的,這里可以直接使用HTML并通過(guò)使用add_s函數(shù)實(shí)現(xiàn)表情,示例代碼如下所示。<img<img<img<img<img<img<img<img<img<img/0.gif" /1.gif" /2.gif" /3.gif" /4.gif" /5.gif" /6.gif" /7.gif" /8.gif" 上述代碼呈現(xiàn)了若干表情,并編寫(xiě)了HTML控件的onclick。該通過(guò)傳遞參數(shù)添加到文本框控件中。例如當(dāng)單擊URL路徑為“s/0.gif”的時(shí),會(huì)觸發(fā)add_s(‘:)’),該會(huì)傳遞一個(gè)“:)TextBox229-27所示。
29-27會(huì)以表情的形式呈現(xiàn),如果需要以表情的形式呈現(xiàn),在執(zhí)行數(shù)據(jù)插入前,還需要將表情轉(zhuǎn)換成HTML代碼,代碼如下所示。publicstring(object{stringdata=data=;",//data=ce(""",//data=ce("&qapos;",//data=ce("<",//data=ce(">",//data=ce(":o)","<img/13.gif\"ale=\"大笑 //替換data=ce(":)","<img.gif\"ale=\"我得意的笑 //替換data=ce(":s","<img.gif\"ale=\"委屈的很 //替換data=ce(":>","<img/2.gif\"的笑 //替換data=ce(":-)","<img/3.gif\"ale=\"啊哦..嗚嗚 //替換data=ce(":->","<img/4.gif\"ale=\"嘿嘿 //替換data=ce(":<","<img/5.gif\"ale=\"我哭哭了 //替換data=ce(";)","<img.gif\"ale=\"媚眼 //替換data=ce(":o","<img/7.gif\"ale=\"有點(diǎn)小小的驚訝 //替換data=ce(":zz","<img/8.gif\"ale=\"睡覺(jué)覺(jué)咯 //替換data=ce(":(","<img.gif\"ale=\"大哭特哭 //替換data=ce(":..","<img/10.gif //data=ce(":xx","<img/11.gif\"ale=\"我惱火的很 //替換data=ce(":p","<img/12.gif\"ale=\"笑笑 //替換data=ce(":ma","<img/14.gif\"ale=\"驚訝 //替換}return上述代碼將相應(yīng)的字符串進(jìn)行轉(zhuǎn)換,從而呈現(xiàn)相應(yīng)的表情的HTML。例如“:)”字符串會(huì)在應(yīng)用程序執(zhí)行時(shí)被替換成字符串“<imgsrc=\"s/0.gif\"ale=\"我得意的笑\"/>”。當(dāng)頁(yè)面呈現(xiàn)時(shí),該字HTMLstringstringstrsql"insertintodiarygbook(title,time,content,userid,diaryidvaluesTextBox1.TextDateTime.Now+"','"+opFormats (TextBox2.Text)+"','"+Session["userid"].ToString()+"','"+Request.QueryString["id"]+"')"; //SQL上述代碼在插入數(shù)據(jù)前使用了 HTML29-2829-28用戶(hù)進(jìn)行管理的嘗試,還為管理員提供了統(tǒng)一的管理界面和管理工具,管理員能夠在管理制作。在制作框架集之前首先需要確定框架的作用,這里可以創(chuàng)建一個(gè)【橫幅和】形式的框架用于29-29所示。29-2929-29中可以看出,這三個(gè)串口分別位于主窗口的上方、下方左側(cè)和下方右側(cè)。這里分別命名為head.aspx、left.aspx和center.aspx并將框架集保存為<body<bodystyle="background:whiteurl('images/bg.png')repeat-<p><imgalt=""height="96"src="images/logo.png"width="379"理和操作,可以在側(cè)邊欄使用TreeView控件進(jìn)行導(dǎo)航,示例代碼見(jiàn)光盤(pán)中源代碼第29其中,頁(yè)面代碼編寫(xiě)了一個(gè)TreeView控件用于系統(tǒng)的導(dǎo)航,TreeView控件包括管理首頁(yè)、日日志管理:包括日志的修改和刪除,管理員能夠在管理日志并進(jìn)行日志的刪除操作用戶(hù)管理:用戶(hù)管理包括用戶(hù)的修改、信息的修改以及用戶(hù)的刪除在確定了基本的管理模塊后就可以針對(duì)管理模塊進(jìn)行頁(yè)面的開(kāi)發(fā)雖然管理員能夠臺(tái)頁(yè)面進(jìn)行日志的管理操作,但是前臺(tái)的操作畢竟十分有限,在管理頁(yè)面<asp:HyperLinkFieldDataNavigateUrlFields="id"DataNavigateUrlFormatString="dmodi.aspx?id={0Text="修改"><ItemStyleWidth="25px"<asp:HyperLinkFieldDataNavigateUrlFields="id"DataNavigateUrlFormatString="dmodi.aspx?id={0Text="修改"><ItemStyleWidth="25px"<asp:HyperLinkFieldDataNavigateUrlFields="id"DataNavigateUrlFormatString="del.aspx?id={0Text="刪除"><ItemStyleWidth="25px"上述代碼只是GridView控件的一部分,用于呈現(xiàn)自定義修改超和刪除超。在代碼中,系系統(tǒng)會(huì)跳轉(zhuǎn)到dmodi.aspxdmodi.aspx頁(yè)面進(jìn)行數(shù)據(jù)的修改和更新。當(dāng)管理員單擊【刪除】超時(shí),系統(tǒng)會(huì)刪除相應(yīng)的信息。<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ConnectionStrings:friendsConnectionString%>"mand="SELECT*FROM[diary]ORDERBY[id]上述代碼只使用了SqlDataSource控件的 mand屬性進(jìn)行數(shù)據(jù)的呈現(xiàn),如圖29-30所示,29-30另外,管理員在修改日志時(shí)具備比前臺(tái)修改的權(quán)限,包括前臺(tái)不能夠修改的字段,管理員也能夠在管理頁(yè)面中的日志修改可以修改不同的用戶(hù)、不同的字段,相比之下,從進(jìn)行日志修改能夠更加方便的進(jìn)行多個(gè)字段的修改,日志修改頁(yè)面HTML代碼見(jiàn)光盤(pán)中源代碼\第29臺(tái)頁(yè)面中,管理員能夠修改用戶(hù)的基本信息,但是無(wú)法修改用戶(hù)日志的和閱讀次數(shù)。在系統(tǒng)中,管理員能夠修改用戶(hù)日志的以便能夠修正用戶(hù)的日志信息。另外,管理員還能夠修改閱讀次數(shù),示例代碼見(jiàn)光盤(pán)中源代碼\29章\29-1\29-1\admin\dmodi.aspx。<td<FCKeditorV2:FCKeditorID="FCKeditor1"runat="server"<td<FCKeditorV2:FCKeditorID="FCKeditor1"runat="server"protectedprotectedvoidButton1Click(objectsender,EventArgs{{stringstrsql="updatediarysettitle='"+TextBox1.Text+"',content='"+FCKeditor1.Value+"',time='"+TextBox2.Text+"',hits='"+TextBox3.Text+"'whereid='"+Request.QueryString["id"]+ }{Label3.Text="出現(xiàn)錯(cuò)誤,請(qǐng)檢查日志 //提示異常信}}protectedprotectedvoidPage_Load(objectsender,EventArgs{stringstrsql"deleteformdiarygbookwherediaryid='"+Request.QueryString["id"]+"'";//刪除評(píng)論stringstrsql1="deletefromdiarywhereid='"+Request.QueryString["id"]+"'"; ////////}評(píng)論刪除功能的實(shí)現(xiàn)非常簡(jiǎn)單,可以直接使用系統(tǒng)數(shù)據(jù)源控件提供的刪除功能即可實(shí)現(xiàn)評(píng)論的刪除。示例代碼見(jiàn)光盤(pán)中源代碼\9章\29129admn\gange.apx。GridViewSQL語(yǔ)句,示例代碼見(jiàn)光盤(pán)中源代碼\29章\29-1\29-1\admin\gmanage.aspx中數(shù)據(jù)源的配置。SQL語(yǔ)句的生成。當(dāng)數(shù)據(jù)綁定控件執(zhí)行了刪除操作時(shí),會(huì)觸發(fā)數(shù)據(jù)源控件的mand屬性進(jìn)行數(shù)據(jù)刪除。txtjstxt是若干字符而已,最多顯示一些,所以板報(bào)只需要打開(kāi)txt文件進(jìn)行文件內(nèi)容的增刪即可。當(dāng)板報(bào)txt文本文件的內(nèi)容,示例代碼如下所示。protectedprotectedvoidPage_Load(objectsender,EventArgs{if{{StreamReaderaw=File.OpenText(Server.MapPath("banbao.txt"));TextBox1.Text=aw.ReadToEnd();}{TextBox1.Text="公告文本文 錯(cuò)誤}}}protectedvoidButton1Click(objectsender,EventArgs{StreamWritersw1=File.CreateText(Server.MapPath("banbao.txt"));protectedvoidButton1Click(objectsender,EventArgs{StreamWritersw1=File.CreateText(Server.MapPath("banbao.txt"));}////////<%@Page AutoEventWireup="true"AutoEventWireup="true"CodeBehind="banbao.aspx.cs"Inherits="291.js.banbao".write('<%Response.Write(str);publicpartialclassbanbao:publicpartialclassbanbao:{publicstringstr=protectedvoidPage_Load(objectsender,EventArgs{{ StreamReaderaw=File.OpenText(Server.MapPath("../admin/banbao.txt"));str=//}{str="暫時(shí)沒(méi)有任何公告 //拋出異}}} 是,由于該js文件保存在根 的js文件夾下,所以文本的路徑也應(yīng)該隨之改變。如果無(wú)法<divclass="mainboard<divclass="mainboard<scriptsrc="js/banbao.aspx"JavaScript形式呈現(xiàn)數(shù)據(jù)時(shí),要過(guò)濾“’JavaScript無(wú)法顯示某些關(guān)鍵protectedvoidPageLoad(objectsender,EventArgsprotectedvoidPageLoad(objectsender,EventArgs{if{stringstr="select*fromregisterwhereid='"+Request.QueryString["id"]+"'";SqlDataReaderda=SQLHelper.SQLHelper.ExecReader(str);while{Label1.Text=da["username"].ToString();TextBox2.Text=da["password"].ToString();////DropDownList1.Text= //////TextBox3.Text=da["picture"].ToString();TextBox4.Text=da["im"].ToString();TextBox5.TextTextBox3.Text=da["picture"].ToString();TextBox4.Text=da["im"].ToString();TextBox5.Text=da["information"].ToString();TextBox6.Text=}}}protectedprotectedvoidButton1_Click(objectsender,EventArgs{if{//stringstr="updateregister ='"+DropDownList1.Text+"',picture='"+TextBox3.Text"',im='"+TextBox4.Text+"',information='"+TextBox5.Text+"',others='"+TextBox6.Text+"'whereid='"+Request.QueryString["id"]+"'"; //SQL//SQL}{stringstr="updateregistersetpassword='"+TextBox2.Text+"', DropDownList1.Text"',picture='"+TextBox3.Text+"',im='"+TextBox4.Text+"',information='"+TextBox5.Text+"',others='"+TextBox6.Text+"'whereid='"+Request.QueryString["id"]+"'";//SQL語(yǔ)句 //SQL}},protectedprotectedvoidPageLoad(objectsender,EventArgs{stringstrsql1=“deletefromdiarygbookwhereuserid='"+Request.QueryString["uid"]+"'”;stringstrsql2="deletefromdiarywhereuserid='"+Request.QueryString["uid"]+"’";stringstrsql3="deletefromregisterwhereid='"+Request.QueryString["uid"]+ }protectedvoidprotectedvoidPage_Load(objectsender,EventArgs{stringstrsql1="deletefromdiarygbook,diary,registerwherediarygbook.userid=diary.useridanddiarygbook.userid=register.idanddiarygbook.use
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋裝修裝飾合同
- 公司股權(quán)激勵(lì)合同書(shū)
- 買(mǎi)方土地居間合同
- 三農(nóng)資源整合利用與優(yōu)化方案設(shè)計(jì)
- 大門(mén)柱瓷磚施工方案
- 邯鄲防爆墻施工方案
- DB3709T 038-2025 泰山茶 山地低產(chǎn)茶園提升改造技術(shù)規(guī)程
- 充電施工方案
- 鋼管腳手架搭拆施工方案
- 壽光市圣發(fā)育苗廠生態(tài)養(yǎng)殖科普基地項(xiàng)目生態(tài)影響類(lèi)報(bào)告表
- 2024年預(yù)防接種工作計(jì)劃(6篇)
- 《上腔靜脈綜合征》課件
- 2024年夫妻雙方自愿離婚協(xié)議書(shū)樣本
- 萬(wàn)科物業(yè)2024年業(yè)主滿(mǎn)意度提升策略培訓(xùn)案例解讀
- 湘教版地理八年級(jí)下冊(cè) 第五章 中國(guó)的地域差異 綜合測(cè)試卷(含答案)
- 藥店門(mén)店店長(zhǎng)述職報(bào)告
- 2024年電工(初級(jí))操作證考試題庫(kù)附答案
- 2024年湖南省公務(wù)員考試《行測(cè)》真題及答案解析
- 建筑構(gòu)造-教材說(shuō)課-李銀星
- XX基于物聯(lián)網(wǎng)技術(shù)的智慧養(yǎng)老院建設(shè)方案
- 2024年執(zhí)業(yè)醫(yī)師考試-臨床執(zhí)業(yè)助理醫(yī)師考試近5年真題集錦(頻考類(lèi)試題)帶答案
評(píng)論
0/150
提交評(píng)論