第五章 筆記菜單分欄及回復的實現
在第四章中完成的的首頁其實很不完善,一是筆記菜單分欄沒有鏈接,不能點擊;二是點擊筆記題標,不能鏈接到回復頁;三是點擊作者,不能鏈接作者的信息。這一章中將會完善這些功能。
設計思路:修改模板bkblog.dwt.aspx中菜單分欄的超級鏈接,進而更新所有網頁;打開首頁時,瀏覽按時間降序方式顯示所學習筆記的內容,點擊菜單分欄,又能根據分欄進行按時間降序方式分類顯示學習筆記內容。
5.1.1 建立模板菜單
(1)打開模板bkblog.dwt.aspx,選擇動態文本(menuda.LM),創建超級鏈接,鏈接到首頁(index.aspx),選擇【代碼顯示視圖】,把鼠標移至如圖5-1-1所示的紅色垂直線的地方。(下面沒有特別說明所有符號都是英文字符)

圖5-1-1 鼠標移至到鏈接屬性
(2)輸入“?menanw=”(menanw就是的參數變量),切換到【綁定】面板,拖拉數據集(menuda)下的字段LMID到到剛才輸入的等于號后面,結果如圖5-1-2所示:

圖5-1-2 插入動態屬性(a.href)
(3)切換到【服務器行為】面板,可以看已經增加一個服務器行為:動態屬性(a.href),如圖5-1-3所示:

圖5-1-3 服務器行為面板
(4)選擇“主頁”菜單,創建鏈接到index.aspx;選擇“聯系我們”,創建鏈接到mailto:wen110@21cn.com。
(5)保存bkblog.dwt.aspx模板,這時會彈出如圖5-1-4所示的對話框。

圖5-1-4 更新模板文件對話框。
(6)單擊“更新”按鈕,完成筆記菜單分欄,并更新首頁index.aspx。
5.1.2 在首頁中實現分欄顯示
(1)打開首頁index.aspx,切換到【服務器行為】面板,雙擊數據集(Ztre),在彈出的數據集對話框中,單擊“高級”按鈕,如圖5-1-5所示。選擇【SQL】文本區域中的SQL命令進行復制,建議把它粘貼到新建立的記事本或Word文本中,它在以后步驟中將會有很大作用(熟悉SQL語言,可以跳過此步驟)。

圖5-1-5 數據集高級對話框
(2)單擊“簡單”按鈕,在【篩選】下拉菜單中選擇篩選字段為LMID,選“URL參數”作為參數傳遞方式,輸入參數變量為menanw,按“確定”鍵,結果如圖5-1-6所示:

圖5-1-6 修改Ztre數據集為篩選
(3)對首頁進行IE瀏覽,瀏覽結果沒有記錄,如圖5-1-7所示

圖5-1-7 首頁瀏覽圖
(4)在首頁IE瀏覽中,單擊鏈接“網絡編程”,結果如上章的圖4-3-3所示,顯示出所有網絡編程的學習筆記。
“等等,這與原先的設計思路不符合!只有按分欄顯示,不能顯示所有學習筆記!”這里還有個asp.net頁間數據傳遞的問題:Windows應用程序中的各Form窗體間數據傳遞可以通過定義全局變量(Public static 變量)等方法來實現。而這些方法卻無法用以ASP.NET中各Web頁面數據傳遞。例如:當點擊數據集導航條會有個Ztre_currentPage的數據傳遞,卻不能傳遞menanw的數據,也就是說當點擊數據集導航條的任何一個超級鏈接,menan傳遞的數據永遠是空值,這就不能既實現分欄顯示,又同時進行在分欄下的分頁顯示。這里是采取session進行參數傳遞的方法解決。
(5)為了把參數變量menanw傳遞給session("menanw"),切換到代碼視圖,在<html>標簽之前,插入如圖5-1-8紅色圈中所示的代碼。

圖5-1-8 給index.aspx插入頁面載入默認函數
(6)在【服務器行為】面板中選擇數據集(Ztre),如圖5-1-9所示,帶黑色部分的就是數據集(Ztre)定義代碼。

圖5-1-9 數據集Ztre的代碼
(7)找到代碼:
CommandText='<%# "SELECT * FROM ZTRE WHERE LMID = ? ORDER BY ZITIME ASC" %>'
把上面的代碼改為:
CommandText='<%# IIf(((request.QueryString("menanw")<>nothing) or Request.QueryString("Ztre_CurrentPage") <> Nothing),"SELECT * FROM ZTRE WHERE LMID = ? ORDER BY ZITIME DESC","SELECT * FROM ZTRE ORDER BY ZITIME DESC") %>'
(8)找到代碼:
<Parameter Name="@LMID" Value='<%# IIf((request.QueryString("menanw") <> Nothing), request.QueryString("menanw"), "") %>' Type="Integer" /></Parameters></MM:DataSet>
把上面的代碼改為:
<Parameter Name="@LMID" Value='<%# IIf((session("menanw") <> Nothing), session("menanw"), "") %>' Type="Integer" /></Parameters></MM:DataSet>
(9)進行IE瀏覽,結果第四章的圖4-3-3所示。完成既定的設計思路。

設計思路:能夠實現點擊筆記的標題,就能夠夠鏈接出一個頁面,包括這筆記和相應所有回復。從上一節,可以這已不難了,只在筆記標題的超級鏈接上進行這個筆記的代碼參數傳遞就可以實現了。
5.2.1 基本頁面設計
(1)新建由模板bkblog.dwt.aspx生成的ASP.NET VB 動態頁hf.aspx,在mainbody可編輯區域中插入表格ztre,并進行有關設計,結果如圖5-2-1所示:

圖5-2-1 表格ztre設計圖
(2)啟動access2003,建立FH表、YH表連接查詢HFRE,其實連接視圖及顯示字段如圖5-2-2所示。

圖5-2-2 查詢HFRE的有關設計
(3)按4.2.2數據集那節中(1)-(3)步驟,添加數據集Ztre,拖拉字段到相應位置,并進行動態文本(Ztre.ZYTEXT)的格式設置,結果如圖5-2-3所示:

圖5-2-3 綁定數據到表格ztre
(4)修改數據集Ztre為篩選,篩選字段為ZTID,選“URL參數”作為參數傳遞方式,輸入參數變量為ztanw。
(5)添加數據集Hfre,篩選字段為ZTID,選“URL參數”作為參數傳遞方式,輸入參數變量為ztanw,結果如圖5-2-4所示:

圖5-2-4 數據集Hfre的設計
(6)拖拉數據集Hfre字段到表格ztre的相應位置,設動態文本(Htre.HFTEXT)的格式設置“編碼—HTML編碼格式”,將表格ztre的第5、6、7行,定義為重復區域,定義數據分頁到表格ztre,結果如圖5-2-5所示:

圖5-2-5 綁定數據集Htre到表格ztre中
(7)打開首頁index.aspx,選擇動態文本(Ztre.ZTNAME),創建超級鏈接,鏈接到hf.aspx,切換到代碼視圖,把鏈接屬性改為:hf.aspx?ztanw=,拖拉數據集Ztre下的字段ZTID到等于號之后,結果如圖5-2-6所示:

圖5-2-6 在代碼中添加動態超級鏈接
(8)保存hf.aspx和index.asps,在Access中給相應HF表、YH表隨便輸入幾個記錄,進行IE瀏覽器中瀏覽index.asps,點出有回復的學習筆記主題,如圖5-2-7所示:

圖5-2-7 回復頁的顯示
(9)再點擊數據集導航的任何一個超級鏈接,結果如圖5-2-8所示:

圖5-2-8 點擊數據集導航后頁面結果
啊!全沒了!這就是ASP.NET網頁間數據傳遞的問題。得像5.1節中那進行修改。
(10)切換到代碼視圖,在<html>標簽之前,插入如圖5-2-9紅色圈中所示的代碼。

圖5-2-9 給hf.aspx插入頁面載入默認函數
(11)找到數據集Ztre中的代碼:
<Parameter Name="@ZTID" Value='<%# IIf((request.QueryString("ztanw") <> Nothing), request.QueryString("ztanw"), "") %>' Type="Integer" />
把上面代碼中request.QueryString("ztanw")替代為session("ztanw"),結果代碼修改為
<Parameter Name="@ZTID" Value='<%# IIf((session("ztanw")<> Nothing), session("ztanw"), "") %>' Type="Integer" />
(12)找到數據集Hfre中的代碼:
<Parameter Name="@ZTID" Value='<%# IIf((request.QueryString("ztanw") <> Nothing), request.QueryString("ztanw"), "") %>' Type="Integer" />
把上面代碼中request.QueryString("ztanw")替代為session("ztanw"),結果代碼修改為
<Parameter Name="@ZTID" Value='<%# IIf((session("ztanw")<> Nothing), session("ztanw"), "") %>' Type="Integer" />
(13)保存hf.aspx。

新聞熱點
疑難解答