




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第25章 新聞模塊設(shè)計(jì)現(xiàn)在的大部分網(wǎng)站都需要使用新聞模塊進(jìn)行網(wǎng)站信息交流,新聞模塊是網(wǎng)站之中最傳統(tǒng)的交流模塊。管理人員能夠通過后臺進(jìn)行新聞的發(fā)布和修改,用戶就能夠在前臺頁面中進(jìn)行新聞的訪問和評論,新聞模塊是網(wǎng)站必不可少的模塊,例如新浪、騰訊、搜狐等大型網(wǎng)站都離不開新聞模塊。25.1 學(xué)習(xí)要點(diǎn)新聞模塊需要涉及到一些ASP.NET 3.5的基本知識,如果要仔細(xì)學(xué)習(xí)新聞模塊的開發(fā),需要詳細(xì)了解本書的一些章節(jié)知識,這些章節(jié)如下所示:q ASP.NET的網(wǎng)頁代碼模型。q Web窗體基本控件。q 數(shù)據(jù)庫基礎(chǔ)。q ADO.NET常用對象。q Web窗體數(shù)據(jù)控件。q ASP.NET內(nèi)置對象。q 生成靜態(tài)的概念基本了解了以上章節(jié)的知識點(diǎn)后,就能夠熟練學(xué)習(xí)和開發(fā)此模塊。25.2 系統(tǒng)設(shè)計(jì)新聞模塊對于網(wǎng)站而言是非常重要的,雖然今天Web 2.0的概念大行其道,但是新聞還是作為網(wǎng)站應(yīng)用的基礎(chǔ)內(nèi)容而存在,新聞能夠提供最簡單的用戶信息交互,對于新聞信息的篩選和投放同樣能夠吸引訪問者。25.2.1 模塊功能描述新聞模塊對于網(wǎng)站開發(fā)而言是最簡單也是最重要的,對于網(wǎng)站而言,作為一個信息媒體,需要向用戶,也就是網(wǎng)站的使用者進(jìn)行信息傳遞。現(xiàn)在的各大門戶網(wǎng)站,如新浪、騰訊和搜狐等,依舊使用的是新聞作為網(wǎng)站主導(dǎo),而對于大行其道的Web 2.0,同樣也是基于新聞模塊的形式進(jìn)行信息呈現(xiàn)。新聞模塊的開發(fā)相對于廣告模塊而言從技術(shù)上實(shí)現(xiàn)比較的簡單,并沒有廣告模塊實(shí)現(xiàn)起來復(fù)雜和繁瑣,也不需要使用自定義控件。但是新聞模塊如果要制作好,還是有一定的難度的,其最主要的難度就在于生成靜態(tài)和偽靜態(tài)化。對于不需要生成靜態(tài)或偽靜態(tài)化的新聞,其功能模塊抽象起來比較的簡單,在新聞使用之前,管理員可以在后臺添加新聞分類,用于分類新聞。在添加新聞分類完畢后,就可以添加新聞并選擇相應(yīng)的分類進(jìn)行新聞分類,分類后的新聞將能夠呈現(xiàn)在不同的頁面中以顯示不同的分類的新聞。從一定的意義上來說,新聞模塊的功能對于管理員而言,就只是添加分類和發(fā)布新聞,如圖25-1所示。圖25-1 新聞模塊基本流程分析正如圖25-1所示,管理員能夠在后臺進(jìn)行新聞模塊中的分類選擇和信息填寫進(jìn)行新聞發(fā)布,管理員還可以對新聞分類進(jìn)行管理。但是在管理員進(jìn)行操作前,首先需要對管理員進(jìn)行身份驗(yàn)證,以判斷管理員是否有合法的權(quán)限進(jìn)行身份驗(yàn)證。身份驗(yàn)證可以使用登錄模塊進(jìn)行身份驗(yàn)證,但是這里的登錄模塊沒有網(wǎng)站的登錄控件復(fù)雜。這里只需要實(shí)現(xiàn)對管理員進(jìn)行判斷,如果判斷是管理員則能夠通過,如果不是管理員則不允許通過的功能即可。從上述模塊功能描述中可以規(guī)劃成以下幾個頁面:q 登錄頁面:管理員登錄頁面,為管理員提供身份驗(yàn)證。q 新聞分類添加頁面:為管理員提供新聞添加功能。q 新聞分類管理頁面:為管理員提供新聞分類的添加和管理。q 新聞頁面:用于顯示新聞。q 首頁調(diào)用:用于進(jìn)行新聞列表的顯示,方便用戶進(jìn)行新聞查閱。這些頁面能夠?yàn)楣芾韱T的新聞發(fā)布和更新進(jìn)行操作提供,管理員首先需要在登錄頁面進(jìn)行登錄操作并進(jìn)行身份驗(yàn)證。如果驗(yàn)證通過,就能夠在新聞分類頁面和新聞頁面進(jìn)行新聞分類操作和新聞操作,管理員可以通過新聞分類操作和新聞操作進(jìn)行新聞的發(fā)布和歸類,這樣有助于在前臺的頁面中進(jìn)行調(diào)用。在前臺顯示中,同樣還需要新聞顯示頁面和首頁,新聞顯示頁面用于顯示單個新聞,而首頁用于顯示新聞相應(yīng)的列表,如在新浪、騰訊等網(wǎng)站的首頁,都是調(diào)用最新的一些新聞列表來呈現(xiàn)的,這樣有助于用戶對新聞信息的篩選和分類。25.2.2 模塊流程分析在各種類型的網(wǎng)站中,例如騰訊,都可以看到首頁被各種新聞版塊內(nèi)容所填充,包括時事、體育、娛樂等等,這些新聞和內(nèi)容版塊都是在后臺相關(guān)人員進(jìn)行采編并納入數(shù)據(jù)庫和頁面中的??梢韵胂螅粋€大型的門戶網(wǎng)站每天會有多少的訪問量,如果每次的用戶訪問都需要從數(shù)據(jù)庫中讀取數(shù)據(jù),那么一天下來可能有幾百萬的讀取次數(shù),這樣無疑會對Web應(yīng)用帶來極大的挑戰(zhàn)。可以觀察各種門戶的新聞,可以看得出來這些門戶的新聞的URL地址的后綴都是.html或者是.shtml的,那么是不是這些網(wǎng)站的開發(fā)人員和采編人員當(dāng)有一條新聞時就手動進(jìn)行頁面編寫呢?顯然答案是否定的,新聞網(wǎng)站可以將一些新聞靜態(tài)化,這樣就能夠保證服務(wù)器只需要承受較少的壓力依舊可以承擔(dān)百萬級的訪問量。生成靜態(tài)就是將數(shù)據(jù)庫中的數(shù)據(jù)或相應(yīng)的字段進(jìn)行靜態(tài)化,例如將.aspx頁面的文件進(jìn)行靜態(tài)化生成成為.html頁面。.html是靜態(tài)頁面,當(dāng)用戶訪問.html頁面時無需進(jìn)行數(shù)據(jù)操作和邏輯操作,對于服務(wù)器而言只需要將.html文本發(fā)送到瀏覽器就能夠顯示頁面的內(nèi)容。這樣無疑增加了訪問速度。如果網(wǎng)站要生成靜態(tài),其基本模塊流程如圖25-2所示。圖25-2 生成靜態(tài)解決方案雖然靜態(tài)化能夠降低服務(wù)器的壓力,但是靜態(tài)化同樣會犧牲很多的空間。如果將新聞數(shù)據(jù)中的每個數(shù)據(jù)進(jìn)行靜態(tài)化,這也就是說每一條新聞就會生成一個.html頁面,那么有十萬條新聞就會生成十萬個.html頁面,這對服務(wù)器操作系統(tǒng)和I/O讀寫也有更高的要求,如果文件太多,打開文件夾的速度還不如讀取數(shù)據(jù)庫。雖然靜態(tài)化是一個解決方案,但是很多情況下也可以不使用靜態(tài)化。如果系統(tǒng)不使用靜態(tài)化,可以使用非靜態(tài)化的解決方案,如圖25-3所示。圖25-3 非靜態(tài)化的解決方案相比之下,非靜態(tài)化的解決方案在實(shí)現(xiàn)上來說更加容易,因?yàn)殪o態(tài)化的實(shí)現(xiàn)方案還需要解析模板。在新聞模塊的編寫中,可以事先考慮是選擇靜態(tài)化的解決方案還是選擇非靜態(tài)化的解決方案,靜態(tài)化的解決方案和非靜態(tài)化的解決方案在開發(fā)過程中雖然可以替換,但是也有一定的開發(fā)風(fēng)險(xiǎn)。而對于管理員而言,無需關(guān)心是否是靜態(tài)化的解決方案還是非靜態(tài)化的解決方案。在后臺的操作過程中,管理員只關(guān)心自己如何能夠快速的進(jìn)行添加新聞和修改新聞等操作,在執(zhí)行了相應(yīng)的操作后,管理員就能夠在前臺進(jìn)行新聞顯示。25.3 數(shù)據(jù)庫設(shè)計(jì)新聞模塊同樣需要多個表進(jìn)進(jìn)行新聞描述和新聞操作,同樣,為了安全起見和模塊的可擴(kuò)展性,還需要其他的表進(jìn)行數(shù)據(jù)存儲,這些表能夠進(jìn)行新聞的存儲、身份驗(yàn)證、新聞分類的增刪以及靜態(tài)化生成保存等操作。23.3.1 數(shù)據(jù)庫設(shè)計(jì)在新聞模塊設(shè)計(jì)中,需要多個表進(jìn)行新聞描述,同時為了保證管理用戶的安全性,還需要設(shè)計(jì)管理員表,這些表包括news、newsclass和admin三個表,這三個表分別存儲新聞、新聞分類和管理員信息。在創(chuàng)建表之前,首先需要創(chuàng)建數(shù)據(jù)庫news,創(chuàng)建完成后就能夠創(chuàng)建相應(yīng)的表。在對新聞模塊進(jìn)行流程分析之后,就能夠大概的設(shè)計(jì)出這三個表中所需要的字段,其中news表所包含的字段如下所示。q 新聞編號:用于標(biāo)識新聞,為自動增長的主鍵。q 新聞標(biāo)題:用于表示新聞的標(biāo)題。q 發(fā)布時間:用于表示新聞發(fā)布的事件。q 新聞作者:用于表示新聞的作者。q 新聞內(nèi)容:用于表示新聞的內(nèi)容。q 發(fā)布天氣:用于表示新聞發(fā)布的天氣。q 新聞等級:用于表示新聞的等級。q 閱讀次數(shù):用于表示新聞的閱讀次數(shù)。q 新聞分類:用于表示新聞的分類,為整型字段。對于新聞分類表而言,可以使用少數(shù)字段進(jìn)行新聞分類的描述,新聞分類表的字段如下所示。q 分類編號:用于標(biāo)識新聞的分類,為自動增長的主鍵。q 分類名稱:用于顯示新聞分類的名稱。在管理員進(jìn)行新聞操作之前,首先需要驗(yàn)證身份,如果管理員是合法用戶則通過驗(yàn)證,否則就不允許進(jìn)行后續(xù)操作,管理員的身份驗(yàn)證和登錄模塊基本相同,但是其功能要比登錄模塊少很多,admin表結(jié)構(gòu)中的字段如下所示。q 管理員編號:用于標(biāo)識管理員信息,為自動增長的主鍵。q 管理員用戶名:用于標(biāo)識管理員用戶名。q 管理員密碼:用于標(biāo)識管理員的密碼,通常情況下和管理員用戶名一起進(jìn)行身份驗(yàn)證。對于新聞表而言,其功能并不是十分的復(fù)雜,而新聞模塊的難度不在于數(shù)據(jù)庫的設(shè)計(jì)上,而在于前臺顯示和靜態(tài)生成,靜態(tài)生成主要是要利用模板解析技術(shù)進(jìn)行靜態(tài)生成,模板解析技術(shù)可以使用編程的方法進(jìn)行編寫也可以使用數(shù)據(jù)庫進(jìn)行模板技術(shù)的支持,這里使用htm文本作為數(shù)據(jù)庫進(jìn)行技術(shù)解析處理,將在后面的章節(jié)進(jìn)行介紹。25.3.2 數(shù)據(jù)表的創(chuàng)建創(chuàng)建表可以通過SQL Server Management Studio視圖進(jìn)行創(chuàng)建也可以通過SQL Server Management Studio 查詢使用SQL語句進(jìn)行創(chuàng)建。新聞模塊同樣需要創(chuàng)建多個表進(jìn)行模塊功能的實(shí)現(xiàn),首先最重要的是news表,news表的字段如下所示。q id:用于標(biāo)識新聞,為自動增長的主鍵。q title:用于表示新聞的標(biāo)題。q time:用于表示新聞發(fā)布的事件。q author:用于表示新聞的作者。q content:用于表示新聞的內(nèi)容。q weather:用于表示新聞發(fā)布的天氣。q level:用于表示新聞的等級。q hits:用于表示新聞的閱讀次數(shù)。q classname:用于表示新聞的分類,為整型字段。確定好news表的各個字段后,就能夠創(chuàng)建一個news表,news表結(jié)構(gòu)如圖25-4所示。圖25-4 news表結(jié)構(gòu)圖中的字段描述了相應(yīng)的字段在實(shí)際應(yīng)用中的意義,創(chuàng)建表的SQL語句如下所示。 USE news GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.news(/創(chuàng)建news表 id int IDENTITY(1,1) NOT NULL, title nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, time datetime NULL, author nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, content nvarchar(3000) COLLATE Chinese_PRC_CI_AS NULL, weather nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, level int NULL, hits int NULL, classname int NULL, CONSTRAINT PK_news PRIMARY KEY CLUSTERED ( id ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARYnews表中的classname字段為整型字段,這也就是說classname字段為另一個表的外鍵,另一個表newsclass用于描述新聞的分類的信息,newsclass字段如下所示。q id:用于標(biāo)識新聞的分類,為自動增長的主鍵。q classname:用于顯示新聞分類的名稱。上述字段描述了newsclass表中需要使用的字段,可以使用SQL語句進(jìn)行表和字段的創(chuàng)建,創(chuàng)建newsclass表的SQL語句如下所示。 USE news GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.newsclass(/創(chuàng)建newsclass表 id int IDENTITY(1,1) NOT NULL, classname nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_newsclass PRIMARY KEY CLUSTERED ( id ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY上述代碼創(chuàng)建了newsclass表,創(chuàng)建完成后,還需要創(chuàng)建admin表,通過上述字段描述可以了解admin表只需要保存管理員的用戶名和密碼即可,則其字段可以描述為如下所示。q id:用于標(biāo)識管理員信息,為自動增長的主鍵。q admin:用于標(biāo)識管理員用戶名。q password:用于標(biāo)識管理員的密碼,通常情況下和管理員用戶名一起進(jìn)行身份驗(yàn)證。上述字段描述了admin表中需要使用的字段,可以使用SQL語句進(jìn)行表和字段的創(chuàng)建,創(chuàng)建newsclass表的SQL語句如下所示。 USE news GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.admin(/創(chuàng)建admin表 id int IDENTITY(1,1) NOT NULL, admin nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, password nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_admin PRIMARY KEY CLUSTERED ( id ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY上述代碼創(chuàng)建了admin表,用于進(jìn)行管理員的身份驗(yàn)證,創(chuàng)建完成后的admin表和newsclass表如圖25-5和圖25-6所示。 圖25-5 admin表結(jié)構(gòu) 圖25-6 newsclass表結(jié)構(gòu)創(chuàng)建完成admin表之后就需要插入一個管理員,在SQL中可以新建查詢并執(zhí)行SQL語句進(jìn)行管理員表中數(shù)據(jù)的插入,示例代碼如下所示。 INSERT INTO admin (admin,password) VALUES (guojing,0123456)執(zhí)行上述代碼就能夠進(jìn)行admin表的數(shù)據(jù)插入,插入一個新管理員之后,就能夠在后面的登錄操作中使用該表的管理員信息。25.4 界面設(shè)計(jì)新聞模塊包括眾多的頁面,這些頁面包括登錄頁面、后臺框架集、新聞發(fā)布頁面、新聞刪除頁面等頁面,這些頁面都需要進(jìn)行界面設(shè)計(jì)。在后臺的開發(fā)過程中,雖然對后臺的界面設(shè)計(jì)并沒有苛刻的要求,但同樣需要良好的用戶體驗(yàn),本章使用Microsoft Expression Web 2進(jìn)行頁面設(shè)計(jì)。25.4.1 登錄界面登錄界面用于進(jìn)行管理員的身份驗(yàn)證,管理員可以在后臺進(jìn)行登錄執(zhí)行相應(yīng)的新聞操作,如果管理員為合法用戶,則允許進(jìn)行新聞操作,否則不允許進(jìn)行新聞操作,登錄界面HTML代碼見光盤中源代碼第25章25-125-1adminlogin.aspx。上述代碼使用了TextBox控件以及驗(yàn)證控件和按鈕控件,這些控件用于驗(yàn)證用戶輸入的是否正確并且判斷用戶是否為合法管理員,管理員可以通過該頁面進(jìn)行登錄操作。如果登錄成功,系統(tǒng)會跳轉(zhuǎn)到后臺管理框架集中,如果登錄不成功,則會提示相應(yīng)的錯誤信息。25.4.2 后臺框架集后臺操作中,為了提高頁面的友好度,可以使用框架集進(jìn)行后臺開發(fā),框架集是多個網(wǎng)頁組成的一個頁面,使用框架集能夠在不刷新的情況下進(jìn)行頁面跳轉(zhuǎn),使用Microsoft Expression Web 2可以制作框架集。在Microsoft Expression Web 2中,單擊【文件】選項(xiàng),在下拉菜單中單擊【新建】選項(xiàng),單擊【網(wǎng)站】選項(xiàng),在彈出窗口中選擇框架集,如圖25-7所示。框架集可以將多個頁面放置在同一個頁面,在Microsoft Expression Web 2中可以創(chuàng)建框架集并為框架集中的頁面進(jìn)行指定或新建,如圖25-8所示。 圖25-7 創(chuàng)建框架集 圖25-8 設(shè)置初始網(wǎng)頁或新建網(wǎng)頁開發(fā)人員可以在框架集中創(chuàng)建網(wǎng)頁或選擇設(shè)置初始網(wǎng)頁,這里創(chuàng)建三個網(wǎng)頁,頭部的網(wǎng)頁用于顯示后臺管理的基本信息,包括這是什么后臺管理系統(tǒng);左側(cè)的邊欄用于顯示操作,這里使用TreeView控件進(jìn)行顯示;中間為主操作區(qū),該操作區(qū)用于后臺中主要的頁面操作。設(shè)置完成后示例代碼見光盤中源代碼第25章25-125-1admindefault.aspx。頁面中的代碼使用了一個框架集。在該框架集中包括三個頁面,這三個頁面分別為top.aspx、left.aspx和center.aspx,其中top.aspx用于顯示相應(yīng)的信息,主要是用來作為導(dǎo)航或者后臺提示,left.aspx用于顯示導(dǎo)航,使用TreeView控件能夠?yàn)樵擁撁嬷谱飨鄳?yīng)的導(dǎo)航,而center.aspx用于呈現(xiàn)相應(yīng)的操作頁面,在這里可以被成為主工作區(qū)。開發(fā)人員能夠在不同的頁面進(jìn)行布局,控件拖動和事件等操作,當(dāng)用戶訪問框架集時,各個頁面之間互不影響,可以在框架集之間進(jìn)行頁面跳轉(zhuǎn),其中l(wèi)eft.aspx代碼見光盤中源代碼第25章25-125-1adminleft.aspx。Left.aspx頁面代碼使用了TreeView控件在left.aspx頁面中添加了導(dǎo)航信息,但是上述代碼并沒有配置TreeView控件中相應(yīng)字段的URL屬性,開發(fā)人員可以通過TreeView控件的屬性進(jìn)行配置。這里只提供left.aspx代碼,對于其他頁面的代碼可以自行布局顯示。如圖25-9所示。圖25-9 框架集布局25.4.3 新聞發(fā)布頁面新聞發(fā)布頁面是新聞系統(tǒng)中最為重要的頁面,新聞發(fā)布頁面主要使用ADO.NET進(jìn)行新聞的發(fā)布和提交等操作,管理員能夠在該頁面進(jìn)行新聞填寫、新聞分類選擇,然后管理員就能夠進(jìn)行新聞數(shù)據(jù)操作,新聞發(fā)布頁面示例代碼見光盤中源代碼第25章25-125-1adminnews_add.aspx。News_add.aspx頁面代碼使用了基本的文本框控件用于文本的輸入。在一些用戶數(shù)據(jù)輸入時,為了保證用戶輸入的是完整的、符合規(guī)范的以及安全的數(shù)據(jù),就需要使用下拉菜單控件進(jìn)行數(shù)據(jù)呈現(xiàn),示例代碼見光盤中源代碼第25章25-125-1adminnews_add.aspx中下拉菜單所示。News-add.aspx頁面代碼聲明了多個文本框控件和下拉菜單控件用于文本的輸入和呈現(xiàn),管理員還需要通過數(shù)據(jù)源控件進(jìn)行數(shù)據(jù)綁定并通過按鈕控件進(jìn)行數(shù)據(jù)提交。按鈕控件用于數(shù)據(jù)提交,而數(shù)據(jù)綁定控件主要用于綁定下拉菜單方便管理員選擇,示例代碼見光盤中源代碼第25章25-125-1adminnews_add.aspx中數(shù)據(jù)源配置代碼所示。新聞發(fā)布頁面使用了數(shù)據(jù)源控件進(jìn)行新聞分類的綁定,這也就是說明了在新聞添加之前,必須要選擇新聞分類,否則新聞分類沒有被填寫,系統(tǒng)就會提示錯誤。在新聞頁面設(shè)計(jì)中,使用TextBox控件和驗(yàn)證控件對管理員的操作進(jìn)行驗(yàn)證和控制,如果管理員沒有填寫相應(yīng)的信息,則系統(tǒng)會提示管理員填寫,當(dāng)管理員填寫完成后,就可以單擊控件進(jìn)行提交。25.4.4 新聞修改頁面新聞修改頁面可以使用控件進(jìn)行編寫,新聞修改頁面的數(shù)據(jù)獲取同樣需要從傳遞的參數(shù)中進(jìn)行選擇和判斷,在ASP.NET 3.5中提供了一些數(shù)據(jù)綁定控件能夠進(jìn)行相應(yīng)的數(shù)據(jù)的查詢和更新,這里使用DetailsView控件,示例代碼見光盤中源代碼第25章25-125-1adminmodi.aspx。上述代碼使用DetailsView控件進(jìn)行數(shù)據(jù)綁定并能夠使用DetailsView控件自帶的更新功能進(jìn)行數(shù)據(jù)更新。由于新聞更改頁面需要通過獲取的參數(shù)進(jìn)行查詢和更新,在配置DetailsView控件使用的數(shù)據(jù)源時,SELECT查詢語句必須配置參數(shù),如圖25-10所示。圖25-10 配置WHERE子句配置WHERE子句就能夠讓數(shù)據(jù)源通過傳遞的參數(shù)進(jìn)行相應(yīng)的數(shù)據(jù)更新而不會涉及到其他的新聞數(shù)據(jù),數(shù)據(jù)源源代碼見光盤中源代碼第25章25-125-1adminmodi.aspx中數(shù)據(jù)源配置代碼。在配置數(shù)據(jù)源時,同樣需要配置能夠自動生成“插入、更新、刪除”等操作,這樣數(shù)據(jù)綁定控件才能夠支持?jǐn)?shù)據(jù)的插入、更新和刪除。在新聞修改頁面,只需要進(jìn)行新聞的更新即可,在配置數(shù)據(jù)綁定控件時,無需選擇“插入、刪除”等操作。25.4.5 新聞管理頁面新聞管理頁面可以使用GridView控件進(jìn)行編程,這樣不僅能夠簡化開發(fā)人員的開發(fā)操作,還能夠提高開發(fā)效率,因?yàn)镚ridView控件能夠支持?jǐn)?shù)據(jù)的更新和刪除,使用GridView控件能夠直接執(zhí)行數(shù)據(jù)的更新和刪除操作。由于新聞修改頁面是一個單獨(dú)的頁面,而且在單獨(dú)的頁面中進(jìn)行新聞修改能夠提高用戶體驗(yàn),所以在新聞管理頁面中就不再使用修改功能,GridView控件示例代碼見光盤中源代碼第25章25-125-1adminmanage.aspx。使用GridView控件可以進(jìn)行相應(yīng)字段的篩選,在管理頁面中,并不需要每個字段都顯示,例如content新聞內(nèi)容字段。如果在管理頁面同樣要呈現(xiàn)content字段的話,那么當(dāng)content字段的數(shù)據(jù)很多,例如是一篇很長的文章,那么頁面就會被壓縮的很難看,甚至變形。所以在新聞管理頁面可以選擇顯示相應(yīng)的字段而不顯示一些不常用的字段,GridView控件配置后如圖25-11所示。圖25-11 GridView控件GridView控件自己能夠支持刪除操作。在GridView控件中,需要添加HypeLink列進(jìn)行頁面跳轉(zhuǎn)。當(dāng)管理人員單擊【修改】連接時,就能夠跳轉(zhuǎn)到新聞修改頁面進(jìn)行新聞修改,而無需關(guān)心新聞修改頁面的開發(fā)和維護(hù)。25.4.6 新聞分類管理頁面新聞分類管理頁面用于管理新聞分類,管理員可以在新聞分類管理頁面進(jìn)行新聞分類的添加和刪除,在新聞分類的管理和添加頁面中,同樣可以使用ASP.NET 3.5提供的ListView控件進(jìn)行分頁、添加、修改、刪除等操作,示例代碼見光盤中源代碼第25章25-125-1adminclassmanage.aspx。ListView控件能夠提供數(shù)據(jù)的插入、更新和刪除等功能,對于簡單的數(shù)據(jù)操作可以使用ListView控件進(jìn)行功能實(shí)現(xiàn),而如果需要復(fù)雜的數(shù)據(jù)操作和頁面布局,使用ListView控件就不能很好的完成。ListView控件通常情況下可以使用到數(shù)據(jù)較少,數(shù)據(jù)字段較短的情況下,如果對頁面布局要求不是很高,也可以使用ListView控件。25.5 代碼實(shí)現(xiàn)在新聞模塊開發(fā)中包含了很多的頁面,這些頁面有些可以使用控件進(jìn)行實(shí)現(xiàn),而有些需要使用編程的方法進(jìn)行代碼實(shí)現(xiàn),例如登錄時的身份驗(yàn)證,新聞模塊中的新聞發(fā)布甚至是新聞顯示和生成靜態(tài)等功能。這些功能沒有現(xiàn)有的控件提供功能實(shí)現(xiàn),而需要開發(fā)人員進(jìn)行代碼實(shí)現(xiàn)。25.5.1 導(dǎo)航菜單配置在后臺管理的框架集中,可以配置導(dǎo)航菜單進(jìn)行頁面跳轉(zhuǎn),管理人員可以通過導(dǎo)航菜單進(jìn)行頁面的管理和跳轉(zhuǎn)操作。當(dāng)管理員單擊導(dǎo)航菜單上的新聞管理時,就應(yīng)該在主工作區(qū)中間顯示新聞管理頁面而不會刷新其他頁面,同樣當(dāng)管理員點(diǎn)擊其他操作時,會跳轉(zhuǎn)到不同的頁面。導(dǎo)航菜單示例代碼見光盤中源代碼第25章25-125-1adminleft.aspx。Left.aspx頁面代碼使用了TreeView控件中節(jié)點(diǎn)的NavigateUrl屬性配置了單擊該節(jié)點(diǎn)時應(yīng)該跳轉(zhuǎn)的頁面,并使用了節(jié)點(diǎn)的Target屬性進(jìn)行了連接應(yīng)該跳轉(zhuǎn)的框架集。注意:在超鏈接中包含target屬性,而TreeView控件同樣包含Target屬性。在框架集中,需要指定相應(yīng)的連接所需要跳轉(zhuǎn)的框架,否則跳轉(zhuǎn)的框架會在自身頁面中執(zhí)行。25.5.2 身份驗(yàn)證頁面在管理員操作之前,首先需要進(jìn)行身份驗(yàn)證,如果管理員是合法的用戶,那么系統(tǒng)就能夠使管理員進(jìn)行添加和刪除等操作。如果系統(tǒng)驗(yàn)證操作人員不是合法用戶,那么就不應(yīng)該為用戶賦予權(quán)限,并阻止用戶的登錄和管理操作。打開登錄頁面,雙擊按鈕編寫相應(yīng)的登錄事件,示例代碼如下所示。 protected void Button1_Click(object sender, EventArgs e) try SqlConnection con = new SqlConnection(Data Source=(local); Initial Catalog=news;Integrated Security=True);/創(chuàng)建連接 con.Open(); string strsql = select * from admin where admin= + TextBox1.Text + and password= + TextBox2.Text + ;/創(chuàng)建SQL SqlDataAdapter da = new SqlDataAdapter(strsql, con);/創(chuàng)建適配器 DataSet ds = new DataSet();/創(chuàng)建數(shù)據(jù)集 int count = da.Fill(ds, table);/填充數(shù)據(jù)集 if (count 0)/如果存在用戶 Sessionadmin = TextBox1.Text;/配置一個Session Response.Redirect(default.aspx);/頁面跳轉(zhuǎn) else Label1.Text = 無法登錄,請檢查用戶名和密碼;/提示無法登錄 catch Label1.Text = 無法進(jìn)行數(shù)據(jù)連接;/拋出異常 上述代碼使用了ADO.NET中的數(shù)據(jù)對象進(jìn)行數(shù)據(jù)操作,其操作和登錄控件一樣,在數(shù)據(jù)庫中查詢相應(yīng)的信息,如果查詢的結(jié)果大于0則說明該查詢在數(shù)據(jù)庫中是有效的,也就是說存在這樣一個管理員能夠進(jìn)行登錄,而如果查詢的結(jié)果小于0則說明不存在相應(yīng)的管理員。在管理頁面的各個頁面都需要進(jìn)行用戶身份判斷,當(dāng)管理員登錄成功后,系統(tǒng)會配置一個Session對象給用戶,如果管理員操作超時或者操作者是一個非法用戶,那么就沒有Session對象。在各個頁面判斷Session對象是否存在,就能夠判斷是否是合法的管理員,示例代碼如下所示。 if (Sessionadmin = null)/如果不為管理員 Response.Redirect(login.aspx);/登錄跳轉(zhuǎn) 如果相應(yīng)的Session對象為空,就說明正在操作的用戶不具備管理權(quán)限,則應(yīng)該跳轉(zhuǎn)到login.aspx頁面進(jìn)行重新進(jìn)行登錄操作。25.5.3 新聞發(fā)布頁面在新聞發(fā)布頁面,管理員只需要在相應(yīng)的字段進(jìn)行新聞內(nèi)容的填寫,包括新聞的標(biāo)題、內(nèi)容、作者等就能夠進(jìn)行新聞的發(fā)布。對于非靜態(tài)生成的新聞發(fā)布而言,只需要進(jìn)行數(shù)據(jù)的插入即可,示例代碼如下所示。 protected void Page_Load(object sender, EventArgs e) if (Sessionadmin = null)/如果不為管理員 Response.Redirect(login.aspx);/登錄跳轉(zhuǎn) TextBox2.Text = DateTime.Now.ToString();/初始化字段 protected void Button1_Click(object sender, EventArgs e) try SqlConnection con = new SqlConnection(Data Source=(local); Initial Catalog=news;Integrated Security=True);/創(chuàng)建連接 con.Open();/打開連接 string strsql = insert into news (title,time,author,content,weather,level,hits,classname) values ( + TextBox1.Text + , + TextBox2.Text + , + TextBox3.Text + , + TextBox5.Text + , + TextBox4.Text + , + DropDownList1.Text + ,0, + DropDownList2.Text + );/SQL語句 SqlCommand cmd = new SqlCommand(strsql, con);/創(chuàng)建Command cmd.ExecuteNonQuery();/執(zhí)行SQL語句 Response.Redirect(manage.aspx);/頁面跳轉(zhuǎn) catch(Exception ee) Response.Write(ee.ToString();/拋出異常 新聞發(fā)布頁面只需要執(zhí)行相應(yīng)的SQL語句進(jìn)行數(shù)據(jù)插入即可,如果新聞發(fā)布只需要進(jìn)行動態(tài)讀取,那么只需要進(jìn)行靜態(tài)插入新聞即可,而不需要進(jìn)行模板解析操作;如果需要生成靜態(tài)頁面,那么就需要進(jìn)行模板編寫再生成純靜態(tài)頁面。25.5.4 靜態(tài)生成功能靜態(tài)生成聽上去非常的復(fù)雜,但是其實(shí)靜態(tài)生成非常的簡單。當(dāng)管理員發(fā)布一條新聞,就會在數(shù)據(jù)庫中插入數(shù)據(jù),數(shù)據(jù)插入后就應(yīng)該解析模板進(jìn)行靜態(tài)生成。靜態(tài)生成的是一個文件,這個文件可以是一個.html文件或者.shtml文件。在生成文件之前,可以運(yùn)行以下代碼,示例代碼如下所示。 protected void Page_Load(object sender, EventArgs e) if (!IsPostBack)/判斷加載 string str = *title*;/模板代碼 string database = 新聞標(biāo)題;/數(shù)據(jù)庫字段 string output = str.Replace(*title*, database);/替換操作 Response.Write(output);/輸出字符串 上述代碼簡單的定義了一個模板代碼,其中str變量被定義為標(biāo)簽,database變量被定義為新聞標(biāo)題,當(dāng)需要生成靜態(tài)時,可以將模板中代碼的關(guān)鍵字進(jìn)行替換,例如這里的*title*替換成為database變量中的標(biāo)簽,替換完成后輸出替換后的字符串生成即可。在模板代碼中,模板代碼如下所示。 string str = *title*;其中*title*是定義的標(biāo)簽,用于替換關(guān)鍵字,*title*可以替換新聞標(biāo)題數(shù)據(jù)進(jìn)行呈現(xiàn)。在了解了靜態(tài)生成的原理之后,就能夠使用模板解析進(jìn)行靜態(tài)生成,示例代碼如下所示。 protected void Button1_Click(object sender, EventArgs e) try SqlConnection con = new SqlConnection(Data Source=(local); Initial Catalog=news;Integrated Security=True);/創(chuàng)建連接 con.Open();/打開連接 string strsql = insert into news (title,time,author,content,weather,level,hits,classname) values ( + TextBox1.Text + , + TextBox2.Text + , + TextBox3.Text + , + TextBox5.Text + , + TextBox4.Text + , + DropDownList1.Text + ,0, + DropDownList2.Text + );/SQL語句 SqlCommand cmd = new SqlCommand(strsql, con);/創(chuàng)建執(zhí)行對象 cmd.ExecuteNonQuery();/執(zhí)行SQL StreamReader aw = File.OpenText(Server.MapPath(template.htm);/打開模板 string template = aw.ReadToEnd();/讀取模板 aw.Close();/關(guān)閉對象 template = template.Replace(新聞標(biāo)題, TextBox1.Text);/替換標(biāo)簽 template = template.Replace(發(fā)布時間, TextBox2.Text); /替換標(biāo)簽 template = template.Replace(新聞作者, TextBox3.Text); /替換標(biāo)簽 template = template.Replace(新聞天氣, TextBox4.Text); /替換標(biāo)簽 template = template.Replace(新聞內(nèi)容, TextBox5.Text); /替換標(biāo)簽 StreamWriter sw = File.CreateText(Server.MapPath(./html/ + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Second.ToString() + .htm);/生成文件 sw.Write(template);/編寫內(nèi)容 sw.Close();/關(guān)閉對象 Response.Redirect(manage.aspx);/頁面跳轉(zhuǎn) catch(Exception ee) Response.Write(ee.ToString();/拋出異常 上述代碼首先使用ADO.NET進(jìn)行數(shù)據(jù)插入操作,在數(shù)據(jù)操作成功后,就進(jìn)行靜態(tài)生成。靜態(tài)生成的模板為template.htm,通過編寫template.htm文件能夠?yàn)殪o態(tài)文件編輯相應(yīng)的模板。在模板讀取之后,系統(tǒng)會將一些關(guān)鍵字進(jìn)行替換,例如將“新聞標(biāo)題”這個字符串替換為數(shù)據(jù)庫中的新聞標(biāo)題,當(dāng)template.htm模板中包含“新聞標(biāo)題”字符串時,就能夠通過程序?qū)⒃撟址鎿Q成相應(yīng)的數(shù)據(jù)庫中的數(shù)據(jù)。在使用File類之前,需要使用System.IO命名空間,以提供對文件的讀取操作。當(dāng)讀取模板并替換了關(guān)鍵字符串之后,就能夠通過File類的CreateText進(jìn)行文件的存儲,示例代碼如下所示。 StreamWriter sw = File.CreateText(Server.MapPath(./html/ + DateTime.Now.ToString() + .htm); sw.Write(template);/編寫內(nèi)容 sw.Close();/關(guān)閉對象上述代碼生成了一個以時間為文件名的htm靜態(tài)文件,當(dāng)文件生成后,就會保存在html文件夾中。在編寫靜態(tài)標(biāo)簽時,需要注意的是就是靜態(tài)標(biāo)簽應(yīng)該比較復(fù)雜,例如不能夠?qū)itle作為標(biāo)簽進(jìn)行替換,因?yàn)榭赡芪恼轮械暮芏嘧侄味及瑃itle,而html頁面本身就包含title字符串,如果將title進(jìn)行替換,很有可能會將不應(yīng)該替換的字符串替換成數(shù)據(jù)庫文件,這樣很有可能會造成模板輸出錯誤。在制作模板時,盡量使用一些符號進(jìn)行標(biāo)簽規(guī)則,例如標(biāo)題可以編寫成為$title$或者*title*等,就不會與現(xiàn)有的字符串中的字符進(jìn)行沖突,替換了不該替換的字符串。25.5.5 新聞顯示頁面新聞顯示頁面的作用在于顯示新聞,當(dāng)用戶單擊
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國戲曲學(xué)院《安裝工程BM算量軟件應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 輸電線路設(shè)計(jì)規(guī)范
- 事業(yè)單位辦公軟件培訓(xùn)
- 基本公共衛(wèi)生培訓(xùn)
- 2025工程咨詢服務(wù)合同
- 2025合作伙伴采購協(xié)議合同范本
- 2025建筑工程施工合同(V)
- 2025合同法在實(shí)踐中的成就與局限(上)
- 2025年度高校學(xué)生國家助學(xué)金申請合同
- 2025冰箱購銷合同模板
- 國家發(fā)展改革委低空經(jīng)濟(jì)司
- 單位體檢協(xié)議書模板合同
- 課題申報(bào)書:醫(yī)學(xué)院校研究生“導(dǎo)學(xué)思政”創(chuàng)新實(shí)踐路徑研究
- 2025年游泳教練資格認(rèn)證考試?yán)碚撛囶}集(初級)
- 委托律師簽署協(xié)議書
- 圖文工廠轉(zhuǎn)讓協(xié)議書
- 貨物貿(mào)易的居間合同
- 2025-2030中國療養(yǎng)院行業(yè)市場深度分析及前景趨勢與投資研究報(bào)告
- 2025年國企山東濟(jì)南公共交通集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 高二入團(tuán)考試試題及答案
- 福建省漳州市醫(yī)院招聘工作人員真題2024
評論
0/150
提交評論