第29章.制作一個(gè)校友錄系統(tǒng)_第1頁(yè)
第29章.制作一個(gè)校友錄系統(tǒng)_第2頁(yè)
第29章.制作一個(gè)校友錄系統(tǒng)_第3頁(yè)
第29章.制作一個(gè)校友錄系統(tǒng)_第4頁(yè)
第29章.制作一個(gè)校友錄系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

29ASP.NET需求在上一章ASP.NET留言本中,通過(guò)一個(gè)簡(jiǎn)單的ASP.NET留言本項(xiàng)目對(duì)需求分析進(jìn)行介紹,需求分 對(duì)于ASP.NET校友錄系統(tǒng)而言,其作用是為了增加同學(xué)之間的友情,在需求分析文檔的引言部分及其功能進(jìn)行了詳細(xì)的規(guī)劃、設(shè)計(jì),明確了軟件開(kāi)發(fā)中應(yīng)具有的功能、性能使得系統(tǒng)的開(kāi)發(fā)人員和絡(luò),相對(duì)于傳統(tǒng)的C/S(客戶(hù)端/服務(wù)器)模式的軟件開(kāi)發(fā)而言,其成本較高、難以,雖然能夠即時(shí)的與家人和朋友發(fā)送消息,但是無(wú)法與家人和朋友生活和等。而由于互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的用戶(hù)已經(jīng)能夠適應(yīng)基于瀏覽器的應(yīng)用程序,即Web應(yīng)用,也有WebQQ空間、博客、個(gè)人日志等,都是基于瀏為了解決C/S模式的應(yīng)用程序志、、音樂(lè)等難以交互的情況,現(xiàn)開(kāi)發(fā)ASP.NET校友錄系為了解決傳統(tǒng)的C/S應(yīng)用程序中程序的信息交互不夠的問(wèn)題,并加強(qiáng)用戶(hù)與用戶(hù)之間的信息交互,現(xiàn)開(kāi)發(fā)基于.NET平臺(tái)的校友錄應(yīng)用程序,用戶(hù)能夠使用校友錄進(jìn)行信息的通信和,不僅能夠加強(qiáng)ASP.NET校友錄系統(tǒng)可以為現(xiàn)有學(xué)校所使用,也可以被班級(jí)或個(gè)人進(jìn)行使用,適用性廣泛,系統(tǒng)功能能夠在校友錄中進(jìn)行新鮮事的。在ASP.NET校友錄系統(tǒng)的開(kāi)發(fā)過(guò)程中需要確定基本的系統(tǒng)功能,當(dāng)用戶(hù)Web頁(yè)面時(shí)需要進(jìn)行,如果用戶(hù)不進(jìn)行就不能夠和回復(fù)留言,也不能夠錄的用戶(hù)的操作也會(huì)被記錄在日志中,用戶(hù)可以通過(guò)自己的ID進(jìn)行校友錄中的功能或文章的索引。模塊功能ASP.NET校友錄總體模塊劃分如圖29-1所示。操作。對(duì)于用戶(hù)而言,用戶(hù)在ASP.NET校友錄中必須要進(jìn)行和登錄操作,如果用戶(hù)不進(jìn)行登錄操圖29-1ASP.NET校友錄系統(tǒng)模塊劃 圖29-2用戶(hù)登錄模塊流程29-3正如圖29-3所示,管理員在進(jìn)行操作時(shí)同樣需要對(duì)管理員進(jìn)行驗(yàn)證,由于管理員也是用戶(hù)的作,如果有管理權(quán)限,管理員就能夠在進(jìn)行相應(yīng)的管理操作。ASP.NET校友錄比ASP.NET留言本更加的復(fù)雜,在數(shù)據(jù)庫(kù)設(shè)計(jì)上也更加復(fù)雜,不同的表之間還包數(shù)據(jù)庫(kù)分析和校友錄包含了的功能,這些功能都能夠讓校友用戶(hù)在上自己的、音樂(lè)、等,所以以及模塊流程圖可以歸納數(shù)據(jù)庫(kù)中相應(yīng)的表,數(shù)據(jù)庫(kù)設(shè)計(jì)圖如圖29-4所示。29-4數(shù)據(jù)庫(kù)設(shè)計(jì)夠進(jìn)行相應(yīng)的分類(lèi)日志的索引。在ASP.NET校友錄系統(tǒng)中最為重要的就是日志表和與之相關(guān)的表,用日志ID:日志的ID日志所屬用戶(hù)ID:日志所屬用戶(hù)ID日志,例某個(gè)用戶(hù)對(duì)“陽(yáng)光男孩”這個(gè)分類(lèi)特別感,那么用戶(hù)就能夠索引這個(gè)分類(lèi)的所有文章,而暫時(shí)關(guān)閉對(duì)其他文章的覽。模塊面的章中都有設(shè)計(jì),這里同樣要模塊,模塊與前面的用戶(hù)不同是,這里多了個(gè)用戶(hù)權(quán)字段,由于管理員也能進(jìn)行普通的用的作,所以需要另一個(gè)字段進(jìn)行用戶(hù)權(quán)限的描述。當(dāng)用戶(hù)進(jìn)行登錄后,可以對(duì)相應(yīng)的日志進(jìn)行評(píng)論。同樣,當(dāng)日志ID:用于標(biāo)識(shí)評(píng)論的所在的日志,可以通過(guò)該ID數(shù)據(jù)表的SQLServerManagementStudioSQLServerManagementStudio查詢(xún)使用SQL語(yǔ)句進(jìn)行創(chuàng)建。在創(chuàng)建日志表之前首先需要?jiǎng)?chuàng)建friendsASP.NET校友錄系統(tǒng)中最為重要模塊的就是日志模塊,日志模塊的表結(jié)構(gòu)分別如圖29-5和圖29-6所示圖29-5日志表結(jié) 圖29-6日志分類(lèi)表結(jié)SETANSINULLSSETANSINULLSONSETQUOTEDIDENTIFIERONCREATETABLE[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[cla][int]NULL,[userid][int]NULL,[hits][int]NULL,CONSTRAINT[PK_diary]PRIMARYKEY(([id])WITH(PADINDEX=OFF,PUTE=OFF,IGNOREDUPKEY=ALLOWROWLOCKS=ON,ALLOWPAGELOCKS=ON)ON)ONSETSETANSINULLSONSETQUOTEDIDENTIFIERONCREATETABLE[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])ONSETANSINULLSSETANSINULLSONSETQUOTEDIDENTIFIERONCREATETABLE[id][int]IDENTITY(1,1)NOT[title][nvarchar](500)COLLATE[time][datetime]NULL,[content][nvarchar](max)COLLATE[userid][int]NULL,[diaryid][int]PRCCIASPRCCIASCONSTRAINTCONSTRAINT[PKdiarygbook]PRIMARYKEY([id])WITH(PADINDEX=OFF,STATISTICS PUTE=OFF,IGNOREDUPKEY=OFF,ALLOWROWLOCKS=ON,ALLOWPAGELOCKS=ON)ON[PRIMARY])ON評(píng)論表需要同多個(gè)表進(jìn)行連接,其中userid需要與表進(jìn)行連接用于查詢(xún)用戶(hù)的信息,而diaryidSETSETANSINULLSONSETQUOTEDIDENTIFIERONCREATETABLE[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ù),這樣不僅可以減輕注意:對(duì)于公告的數(shù)據(jù)直接在txt文檔中,當(dāng)首頁(yè)需要調(diào)用公告時(shí),可以直接從txt文檔中數(shù)據(jù)進(jìn)行HTML呈現(xiàn)。ServerManagementStudio視圖進(jìn)行編寫(xiě)。在ASP.NET同學(xué)錄系統(tǒng)中,包括一些數(shù)據(jù)約束用于保持?jǐn)?shù)據(jù)庫(kù)中數(shù)據(jù)的完整性,數(shù)據(jù)表關(guān)系圖如圖29-8所示。29-8數(shù)據(jù)庫(kù)關(guān)系29-8SQL語(yǔ)句也會(huì)相應(yīng)的更改,就在ASP.NET校友錄系統(tǒng)中,用戶(hù)能夠自己的日志就需要使用HTML編輯器,HTML編輯器是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ù)雜編輯器”中,可以在項(xiàng)目中使用Fckeditor進(jìn)行文本框制作和二次開(kāi)發(fā)。在項(xiàng)目中添加ckedr將ckedor件貝目由于S.NET應(yīng)用程序的關(guān)系,F(xiàn)ckedor并不會(huì)在解決方案管理器中呈現(xiàn),單擊【解決方案管理器】上方的【顯示所有文件】小9-9FckeditorFckeditor文件夾,選擇【添加到項(xiàng)目】選項(xiàng)就能夠?qū)⑽募A中的所有文件批量添加到項(xiàng)目中,如圖29-10所示。圖29-9顯示所有文 圖29-10添加擊現(xiàn)有項(xiàng)目,在下拉菜單中選擇【添加現(xiàn)有項(xiàng)】選項(xiàng),在中選擇【瀏覽】選項(xiàng)卡,找到【附-Fckeditor編輯器中的bin29-11添加后就能夠在開(kāi)發(fā)中使用Fckeditor編輯器進(jìn)行富文本編輯,開(kāi)發(fā)人員還能夠在中添Fckeditor編輯器。單擊【工具箱】的空白區(qū)域,單擊右鍵,在下拉菜單中選擇【選擇項(xiàng)】選項(xiàng),選擇剛才添加的DLL文件。選擇后單擊【確定】按鈕即可添加控件??丶砑油戤吅缶蜁?huì)在中呈圖29-11添加圖29-12添加后的Fckeditor編輯器控<formid="form1"<formid="form1"29-13Fckeditor使用Fckeditor編輯器可以更快的進(jìn)行富文本的編輯,如果開(kāi)發(fā)人員從頭開(kāi)發(fā)HTML編輯器會(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編輯器SQLHepler是一個(gè)數(shù)據(jù)庫(kù)操作的封裝,使用SQLHepler類(lèi)能夠快速的進(jìn)行數(shù)據(jù)的插入、查詢(xún)、更新等操作而無(wú)需使用大量的ADO.NETSQLHelper類(lèi)為開(kāi)發(fā)人員進(jìn)行數(shù)據(jù)操作提供了Web.config文件為系統(tǒng)的全局配置文件,在ASP.NETWeb.config文件提供了自定義可擴(kuò)展的系<addkey="server"<addkey="database"<addkey="uid"<addkey="pwd"<addkey="look"

//編輯server//編輯guestbook//編輯uid//編輯pwd//編輯look上述代碼對(duì)配置文件.nfg進(jìn)行了相應(yīng)的配置,<atn/>通過(guò)nfraaar.Anser類(lèi)中就使用fuaaar.AStns在配置了Web.config中<appSettings/>配置的信息后,不僅SQLHelper類(lèi)能夠進(jìn)行相應(yīng)參數(shù)的獲取,在應(yīng)用程序中也能夠獲取Web.config中<appSettings/>配置節(jié)的參數(shù)值。在ASP.NET校友錄系統(tǒng)中使用了Fckeditor以及SQLHelper簡(jiǎn)化了HTML用戶(hù)實(shí) 登錄操作,如果用戶(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+"','"+protectedvoidButton1Click(objectsender,EventArgs{{string="insertintoregister(username,password, values('"+TextBox1.Text+"','"+TextBox2.Text+"','"+DropDownList1.Text+"','"+TextBox3.Text+"','"+TextBox4.Text+"','"+TextBox5.Text+"','"+TextBox6.Text+"',0,0)"; //執(zhí)行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)證。用戶(hù)登錄用戶(hù)登錄操作面的章節(jié)中講的非常的多,并且在模塊篇中還詳細(xì)的介紹了用戶(hù)登錄模塊的開(kāi)發(fā),這里可以使用簡(jiǎn)單的登錄模塊進(jìn)行登錄操作即可而無(wú)需實(shí)現(xiàn)復(fù)雜的登錄控制。登錄頁(yè)面HML第29章29121.ax。用戶(hù)完成后就會(huì)跳轉(zhuǎn)到登錄頁(yè)面,登錄頁(yè)面能夠給用戶(hù)配置相應(yīng)的Session對(duì)象以用戶(hù)29-15stringstrsqlselect*fromregisterwhereusernameTextBox1.TextandpasswordTextBox2.Text+"'"; //編寫(xiě)SQL ifSession["username"]=TextBox1.Text;Session["userid"]=sdr["id"].ToString();//用戶(hù) 當(dāng)用戶(hù)進(jìn)行登錄后,系統(tǒng)會(huì)為用戶(hù)賦予三個(gè)Session對(duì)象,這個(gè)三個(gè)對(duì)象的意義為用戶(hù)名、用戶(hù)ID校友錄頁(yè)面先需要進(jìn)行頁(yè)面規(guī)劃。頁(yè)面規(guī)劃如圖29-16所示。29-16校友錄頁(yè)面規(guī)自定義控件namespacenamespacepublicclassMyadmins:{{{{StringBuilderstr=newStringBuilder(); //使用Stringstringstrsql="select*fromregisterwhereuserroot=1orderbyiddesc"; //創(chuàng)建SQL語(yǔ)句SqlDataReadersdr=SQLHelper.SQLHelper.ExecReader(strsql); while(sdr.Read()) { //輸出} //呈現(xiàn)}{ }}}}namespacepublicclassNewFriends:protectedoverridevoidRenderContents(HtmlTextWriteroutput)StringBuilderstr=newnamespacepublicclassNewFriends:protectedoverridevoidRenderContents(HtmlTextWriteroutput)StringBuilderstr=new//使用stringstrsqlselecttop10*fromregisterwhereuserroot=0orderbyid //編寫(xiě)SqlDataReadersdr=SQLHelper.SQLHelper.ExecReader(strsql); while sdr["username //輸出//呈現(xiàn)}}}}上述代碼與值日生控件不同的是,值日生控件通過(guò)遍歷用戶(hù)表中的userroot1的用戶(hù),而校友控件是遍歷用戶(hù)表中userroot為0的用戶(hù),userroot字段用于辨別用戶(hù),可以通過(guò)userroot字段進(jìn)行篩校友錄頁(yè)面<div<div<div在校友錄界面頭部布局實(shí)現(xiàn)中,需要使用logo進(jìn)行頁(yè)面呈現(xiàn),這里可以使用HTML控件進(jìn)行呈現(xiàn)。在顯式了logo之后,就需要呈現(xiàn)banner。banner的樣式在CSS文件中進(jìn)行編寫(xiě),在實(shí)<div包括main_board、main_site以及main_right,示例代碼見(jiàn)光盤(pán)中源代碼\第29章\29-1\29-<div校友錄系統(tǒng)由xx開(kāi)發(fā)完在編寫(xiě)了校友錄頁(yè)面的主窗體后,就能夠編寫(xiě)校友錄底部信息,示例代碼如下所示。在e<div校友錄系統(tǒng)由xx開(kāi)發(fā)完在校友錄頁(yè)面中使用了GridView控件和自定義控件,GridView控件主要是用于呈現(xiàn)日志數(shù)據(jù),其注意:在使用自定義控件時(shí),可能會(huì)提示SQLHelper類(lèi)異常,開(kāi)發(fā)人員可以不予理會(huì)。開(kāi)發(fā)人員也日志發(fā)布HTML編輯器進(jìn)行富文本編輯,這樣就提高了交互性。對(duì)于用戶(hù)而言,也能夠使用HTML編輯器編寫(xiě)豐富的內(nèi)容,包括音樂(lè)和文件上傳。日志發(fā)布頁(yè)面只需要將數(shù)據(jù)插入到相應(yīng)的表即可,日志發(fā)布頁(yè)面示例HTML代碼見(jiàn)光盤(pán)中源代碼\第29章\29-1\29-protectedvoidButton1protectedvoidButton1Click(objectsender,EventArgs{{stringstrsql="insertintodiary(title,author,time,content,marks,cla ,userid,hits)values{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)"; //編寫(xiě)SQL語(yǔ)}{ }}protectedvoidPage_Load(objectsender,EventArgsif(Session["username"]==null||Session["userid"]==日志修改HTML代碼,日志修改頁(yè)面中的控件基protectedprotectedvoidPage_Load(objectsender,EventArgsifif(Session["username"]==null||Session["userid"]==stringstrsql="select*fromdiarywhereid='"+Request.QueryString["idSqlDataReadersdr=SQLHelper.SQLHelper.ExecReader(strsql); //編寫(xiě)SQLif TextBox1.Text=sdr["title"].ToString();Label1.Text=sdr["author"].ToString();Label2.Text=sdr["time"].ToString();TextBox1.Text=sdr["title"].ToString();Label1.Text=sdr["author"].ToString();Label2.Text=sdr["time"].ToString(); protectedvoidButton1protectedvoidButton1Click(objectsender,EventArgs{{stringstrsql="updatediarysettitle='"+TextBox1.Text+"',content='"+FCKeditor1.Value+whereid='"+Request.QueryString["id"]+//執(zhí)行更//頁(yè)面跳}{ //拋出異}}管理員日志protectedvoidprotectedvoidPageLoad(objectsender,EventArgs{ifif(Session["admin"]==stringstrsql="deletefromdiarywhereid='"+Request.QueryString["id"]+ 日志顯示評(píng)論。校友進(jìn)行日志查看,也能夠?qū)ψ约旱娜罩具M(jìn)行編輯處理,管理員能夠?qū)πS训南嚓P(guān)日志進(jìn)行查看、刪日志顯示模塊HTML代碼見(jiàn)光盤(pán)中源代碼\第29章\29-1\29-1\shownew.aspx。DataListSqlDataSourceid進(jìn)行數(shù)據(jù)查詢(xún)并呈現(xiàn)在相應(yīng)的DataList控件中。當(dāng)用戶(hù)評(píng)論后,日志顯示頁(yè)面還需要對(duì)相應(yīng)的評(píng)論進(jìn)行顯示,評(píng)論顯示頁(yè)面HTML代碼見(jiàn)光盤(pán)中源代碼\第29章\29-1\29-1\shownew.aspx。HTML格式輸出。當(dāng)用戶(hù)閱讀日志后并希望能夠protectedvoidButton1protectedvoidButton1Click(objectsender,EventArgsstringstrsql="insertintodiarygbook(title,time,content,userid,diaryid) Response.Redirect("shownew.aspx?id="+Request.QueryString["id"]);//編寫(xiě)//執(zhí)行//頁(yè)面跳用戶(hù)索引而且校友和管理員都能夠進(jìn)行用戶(hù)索引的查看,用戶(hù)索引頁(yè)面HTML代碼見(jiàn)光盤(pán)中源代碼\第29章管理員用戶(hù)protectedvoidPageprotectedvoidPageLoad(objectsender,EventArgsif(Session["admin"]==stringstrsql="deletefromdiarywhereuserid='"+Request.QueryString["uid"]+stringstrsql1deletefromdiarygbookwhereuserid=Request.QueryString["uidstringstrsql2="deletefromregisterwhereid='"+Request.QueryString["uid"]+"'"; 超樣式優(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{color:#3b5888;}{color:#3b5888;}{color:#3b5888;} {background:{color:#3b5888;}{color:#3b5888;}{color:#3b5888;} {background: .mainright{color:#3b5888;}.mainright{color:#3b5888;}.mainright{color:#3b5888;}.mainright{}上述代碼使用了超文本控制樣式進(jìn)行樣式控制其中包括了a:link、a:active、a:visited和a:hover。在 層疊樣式表中,樣式是能夠繼承的。在校友錄應(yīng)用程序開(kāi)發(fā)中,可以定義.mainright{color:#3b5888;}.mainright{color:#3b5888;}.mainright{color:#3b5888;}.mainright{}main_right是樣式表中用于控制側(cè)邊欄的樣式。在校友錄系統(tǒng)中,系統(tǒng)希望右側(cè)的邊欄的超樣圖29-18全局樣 圖29-19局部樣默認(rèn)首頁(yè)publicpartialclassdefault:System.Web.UI.PageprotectedvoidPageLoad(objectsender,EventArgse)publicpartialclassdefault:System.Web.UI.PageprotectedvoidPageLoad(objectsender,EventArgse)當(dāng)系統(tǒng)載入首頁(yè)時(shí),首先會(huì)執(zhí)行首頁(yè)的Page_Load。上述代碼在Page_Load中進(jìn)行了頁(yè)面導(dǎo)航欄Web系統(tǒng)時(shí),通常需要通過(guò)導(dǎo)航欄進(jìn)行應(yīng)用程序功能的查找。校友錄系統(tǒng)的導(dǎo)航欄同樣需要編寫(xiě)事務(wù)邏輯判斷以便不同權(quán)限的用戶(hù)查看的信息是不相同校友錄管理員:該用戶(hù)是校友錄管理員,不僅如此,管理員也是校友錄中校友用戶(hù)的一,{.write('<divstyle="margin:5px5px5px5px;padding:5px5px5px5px;border:1pxdashed.write('<imgalt=""src="../images/groups.png"style="width:16px;height:16px"{.write('<divstyle="margin:5px5px5px5px;padding:5px5px5px5px;border:1pxdashed.write('<imgalt=""src="../images/groups.png"style="width:16px;height:16px"<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" }{.write('<divstyle="margin:5px5px5px5px;padding:5px5px5px5px;border:1pxdashed.write('<imgalt=""src="../images/groups.png"style="width:16px;height:16px"style="width:16px;height:16px"/>你的 是<spanstyle="color:Red">普通用戶(hù)</span>& }29-20用戶(hù)信息導(dǎo)航欄29-21管理員導(dǎo)航樣,通過(guò)調(diào)用此<div<divclass="main在需要使用導(dǎo)航的頁(yè)面添加ss導(dǎo)航信息。s導(dǎo)航并不局限于頁(yè)面或功能的導(dǎo)航,在很多情況下,s導(dǎo)航還能夠制作用戶(hù)控制面板、頁(yè)頭、頁(yè)尾等通用模塊注意:s導(dǎo)航不僅能夠作帶有輯的面,s寫(xiě)TML行頁(yè)面頭、題等通AJAX留言?xún)?yōu)AJAX能夠提高應(yīng)用程序的用戶(hù)體驗(yàn),面的留言本章節(jié)中就使用了AJAX用于無(wú)刷新應(yīng)用程序\29章\29-1\29-1\shownew.aspx其中,頁(yè)面代碼進(jìn)行了數(shù)據(jù)源的配置。值得注意的是,數(shù)據(jù)在AJAX戶(hù)執(zhí)行數(shù)據(jù)更新時(shí),數(shù)據(jù)綁定控件還需要通過(guò)數(shù)據(jù)源重綁定進(jìn)行數(shù)據(jù)更新。當(dāng)用戶(hù)單擊【留言】按鈕后,系A(chǔ)JXprotectedvoidButton1Click(objectsender,protectedvoidButton1Click(objectsender,EventArgs{stringstrsql="insertintodiarygbook(title,time,content,userid,diaryid)valuesstringstrsql="insertintodiarygbook(title,time,content,userid,diaryid)values //生成SQL//執(zhí)行SQL}上述代碼使用了29-22TextBox1.Text="";TextBox2.Text=TextBox1.Text="";TextBox2.Text=程序開(kāi)發(fā)時(shí),還需要注意AJAX運(yùn)行過(guò)程中的控件狀態(tài)。優(yōu)化留言樣,在Web應(yīng)用程序中也可以使用表情,最常見(jiàn)的就是、博客和評(píng)論了,如圖29-24所示。在校Fckeditor進(jìn)行實(shí)現(xiàn)的。為了讓校友錄系統(tǒng)更加豐富,可以使用C#js共同實(shí)現(xiàn)表情功能。 圖29-23QQ表 圖29-24應(yīng)用表

29-25表情呈29-25所示,微笑的表情是字符“”。當(dāng)用戶(hù)單擊【笑臉】表情時(shí),首先笑臉表情會(huì)轉(zhuǎn)義成字符串“:)”呈現(xiàn)在文本框控件中。表情可以使用按鈕控件進(jìn)行呈現(xiàn),當(dāng)單擊相應(yīng)的【表情】按面模型,當(dāng)控件的數(shù)量增大時(shí),難免會(huì)頁(yè)面性能問(wèn)題。為了解決這個(gè)問(wèn)題,可以使用JavaScript進(jìn)行按鈕控件的模擬。項(xiàng),在彈出菜單中選擇【JScript】文件,如圖29-26所示。29-26新建JScriptfunctionadd{varfunctionadd{varstr=} ;上述代碼使用了JavaScript創(chuàng)建了一個(gè)添加表情函數(shù),其過(guò)程非常簡(jiǎn)單。該函數(shù)擁有一個(gè)參數(shù),這 上述代碼了一個(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 /3.gif" <img /4.gif" <img <img <img <img 上述代碼呈現(xiàn)了若干表情,并編寫(xiě)了HTML控件的onclick。該通過(guò)傳遞參數(shù)添加到文本框控件中。例如當(dāng)單擊URL路徑為“s/0.gif”的時(shí),會(huì)觸發(fā)add_s(‘:)’),該會(huì)傳遞一個(gè)“:)”字符串到文本框TextBox2中,如圖29-27所示。

29-27表情呈現(xiàn)和選publicstring{stringdata=publicstring{stringdata=data=data= data= data= data= data=ce(":o)","<img/13.gif\"ale=\"大笑 //替換data=ce(":)","<img/ //替換data=ce(":s","<img/ //替換data=ce(":>","<img/2.gif\" //替換data=ce(":-)","<img //替換data=ce(":->","<img //替換data=ce(":<","<img/ //替換data=ce(";)","<img/ //替換=ce(":o","<img/7.gif\"ale=\"有點(diǎn)小小的驚訝\"/>");//替換data=ce(":zz","<img //替換data=ce(":(","<img/ //替換data=ce(":..","<img/10.gif //替換=ece(":xx","<imgs/11.gif\"ale=\"我惱火的很 //替換data=ce(":p","<img/ //替換data=ce(":ma","<imgs }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í),該stringstringstrsqlinsertintodiarygbooktitle,time,content,userid,diaryidvaluesTextBox1.TextDateTime.Now+"','"+opFormats (TextBox2.Text)+"','"+Session["userid"].ToString()+"','"+Request.QueryString["id"]+"')"; //執(zhí)行SQL 29-28表情顯理、留言管理以及關(guān)鍵字過(guò)濾等功能沒(méi)有實(shí)現(xiàn)。雖然這些功能的實(shí)現(xiàn)并不復(fù)雜,但是這些功能都是管理頁(yè)面用戶(hù)進(jìn)行管理的嘗試,還為管理員提供了統(tǒng)一的管理界面和管理工具,管理員能夠在管理單擊【開(kāi)始】菜單,在菜單中選擇【程序】選項(xiàng),找到【Expression】選項(xiàng)并在Expression選項(xiàng)中選擇【ExpressionWeb2】選項(xiàng)打開(kāi)ExpressionWeb2用于框架集的制作。在制作框架集之前首先需要確定框架的作用,這里可以創(chuàng)建一個(gè)【橫幅和】形式的框架用于系統(tǒng)的管理,如圖29-29所示。29-29選擇框架 上方、下方左側(cè)和下方右側(cè)。這里分別命名為head.aspx、left.aspx和center.aspx并將框架集保存為理和操作,可以在側(cè)邊欄使用TreeView控件進(jìn)行導(dǎo)航,示例代碼見(jiàn)光盤(pán)中源代碼\第29章\29-1\29-其中,頁(yè)面代碼編寫(xiě)了一個(gè)TreeView控件用于系統(tǒng)的導(dǎo)航,TreeView控件包括管理首頁(yè)、日日志雖然管理員能夠臺(tái)頁(yè)面進(jìn)行日志的管理操作,但是前臺(tái)的操作畢竟十分有限,在管理頁(yè)面<asp:HyperLinkFieldDataNavigateUrlFields="id"DataNavigateUrlFormatString="dmodi.aspx?id={0Text="修改"><asp:HyperLinkFieldDataNavigateUrlFields="id"DataNavigateUrlFormatString="dmodi.aspx?id={0Text="修改"><asp:HyperLinkFieldDataNavigateUrlFields="id"上述代碼只是GridView控件的一部分,用于呈現(xiàn)自定義修改超和刪除超。在代碼中,系統(tǒng)會(huì)跳轉(zhuǎn)到dmodi.aspx頁(yè)面并進(jìn)行數(shù)據(jù)的呈現(xiàn)。管理員能夠在dmodi.aspx頁(yè)面進(jìn)行數(shù)據(jù)的修改和當(dāng)管<asp:SqlDataSourceID="SqlDataSource1"runat="server"mand="SELECT<asp:SqlDataSourceID="SqlDataSource1"runat="server"mand="SELECT*FROM[diary]ORDERBY[id]SqlDataSource控件的mand屬性進(jìn)行數(shù)據(jù)的呈現(xiàn),如圖29-30所示,29-30臺(tái)頁(yè)面中,已經(jīng)實(shí)現(xiàn)了日志的修改和刪除。在頁(yè)面中,日志的修改和刪除操作也基本相同。另外,管理員在修改日志具備比前臺(tái)修改的權(quán),包括前臺(tái)不能夠修改字段,管理員也夠在后夠更加方便的進(jìn)行多個(gè)字段的修改,日志修改頁(yè)面HTML代碼見(jiàn)光盤(pán)中源代碼\第29章\29-夠修改閱讀次數(shù),示例代碼見(jiàn)光盤(pán)中源代碼\第29章\29-1\29-1\admin\dmodi.aspx。<td<tdprotectedprotectedvoidButton1Click(objectsender,EventArgs{{stringstrsql="updatediarysettitle='"+TextBox1.Text+"',content='"+FCKeditor1.Value+"',time='"+TextBox2.Text+"',hits='"+TextBox3.Text+"'whereid='"+}{ }}protectedprotectedvoidPage_Load(objectsender,EventArgs{stringstrsqldeleteformdiarygbookwherediaryid='"+Request.QueryString["id"]+"'";//刪除評(píng)論stringstrsql1="deletefromdiarywhereid='"+Request.QueryString["id"]+"'"; //刪//執(zhí)行刪//執(zhí)行刪//頁(yè)面跳}評(píng)論刪除除。示例代碼見(jiàn)光盤(pán)中源代碼\29章\29-1\29-1\admin\gmanage.aspx。SQL語(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ù)刪除。板報(bào)功能門(mén)設(shè)計(jì)數(shù)據(jù)庫(kù)信息,所以板報(bào)可以通過(guò)js進(jìn)行實(shí)現(xiàn)。在板報(bào)功能制作直線(xiàn),首先需要知道板報(bào)功能是如何工作的,板報(bào)功能的實(shí)現(xiàn)需要兩個(gè)文件,這兩個(gè)文件分別為txt文件和以.aspx為結(jié)尾的js文件,這兩js文件:用于調(diào)用txtprotectedvoidPage_Load(objectsender,EventArgsifprotectedvoidPage_Load(objectsender,EventArgsifTextBox1.Text=aw.ReadToEnd(); protectedprotectedvoidButton1Click(objectsender,EventArgsStreamWritersw1=File.CreateText(Server.MapPath("banbao.txt"));保存的板報(bào)數(shù)據(jù)會(huì)保存到文本文檔“banbao.txt”中,當(dāng)需要頁(yè)面中“banbao.txt”文檔的文本時(shí),同樣可以使用StreamReader類(lèi)進(jìn)行。另外,還可以使用JS進(jìn)行文本文檔中內(nèi)容的,示例<%@<%@PageAutoEventWireup="true"CodeBehind="banbao.aspx.cs"Inherits="291.js.banbao".write('<%Response.Write(str);publicpartialclassbanbao:publicstringstr= StreamReaderaw=File.OpenText(Server.MapPath("../admin/banbao.txt"));//str=aw.ReadToEnd();publicpartialclassbanbao:publicstringstr= StreamReaderaw=File.OpenText(Server.MapPath("../admin/banbao.txt"));//str=aw.ReadToEnd(); 文對(duì)str暫時(shí)沒(méi)有任何公告<divclass="mainboard由于該js文件保存在根 的js文件夾下,所以文本的路徑也應(yīng)該隨之改變。如果無(wú)法文本,用公告的頁(yè)面可以通過(guò)js調(diào)用進(jìn)行數(shù)據(jù)呈現(xiàn),<divclass="mainboard注意:在使用JavaScript形式呈現(xiàn)數(shù)據(jù)時(shí),要過(guò)濾“’”等符號(hào),因?yàn)镴avaScript無(wú)法顯示某些關(guān)鍵protectedvoidPage_Load(objectsender,EventArgsifstringstrprotectedvoidPage_Load(objectsender,EventArgsifstringstr="select*fromregisterwhereid='"+Request.QueryString["id"]+"'";SqlDataReaderda=SQLHelper.SQLHelper.ExecReader(str);while//執(zhí)行查數(shù)Label1.Text=//填充控//填充控DropDownList1.Text=da[" DropDownList1.Text=da[" TextBox3.Text=da["picture"].ToString();TextBox4.Text=da["im"].ToString();TextBox6.Text=ifstringstr="updateregister ='"+DropDownList1.Text+"',picture='"+TextBox3.Text"',im='"+TextBox4.Text+"',information='"+TextBox5.Text+"',others='"+TextBox6.Text+where //生成SQL//執(zhí)行SQLstringstr="updateregistersetpassword='"+TextBox2.Text+"', DropDownList1.Text"',picture='"+TextBox3.Textim='"+TextBox4.Textinformation='"+TextBox5.Text+"',othersTextBox6.Textwhere //生成SQL語(yǔ) //執(zhí)行SQLprotectedvoidPageLoad(objectsender,EventArgs{stringstrsql1=“deletefromdiarygbookwhereuserid='"+Request.QueryString["uid"]+"'”;stringstrsql2="deletefromdiarywhereuserid='"+Request.QueryString["uid"]+"’";stringstrsql3="deletefromregisterwhereid='"+Request.QueryString["uid"]+ }protectedvoidPageLoad(objectsender,EventArgs{stringstrsql1=“deletefromdiarygbookwhereuserid='"+Request.QueryString["uid"]+"'”;stringstrsql2="deletefromdiarywhereuserid='"+Request.QueryString["uid"]+"’";stringstrsql3="deletefromregisterwhereid='"+Request.QueryString["uid"]+ }protectedvoidPageprotectedvoidPageLoad(objectsender,EventArgs{stringstrsql1="deletefromdiarygbook,diary,registerwherediarygbook.userid=diary.useridanddiarygbook.userid=register.idanddiarygbook.userid='"+Request.QueryString["uid"]+"'";//上述代碼進(jìn)行復(fù)雜的SQL語(yǔ)句刪除多個(gè) 當(dāng)運(yùn)行上述代碼時(shí),系統(tǒng)會(huì)刪除用戶(hù)所有相關(guān)的信息了用戶(hù)數(shù)據(jù)的約束性和完整性。系統(tǒng)管理頁(yè)面如圖29-31所示。29-31用戶(hù)權(quán)限在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),用戶(hù)的權(quán)限通過(guò)userroot字段進(jìn)行描述的。如果用if{if{string

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論