第五章筆記菜單分欄及回复的實現
在第四章中完成的的首頁其實很不完善,一是筆記菜單分欄沒有鏈接,不能點擊;二是點擊筆記題標,不能鏈接到回复頁;三是點擊作者,不能連結作者的資訊。這一章中將會完善這些功能。
設計思路:修改模板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:[email protected]。
(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。