- ASP.NET項目開發(fā)全程實錄(第4版)
- 明日科技
- 1878字
- 2019-12-06 12:04:38
1.8 帖子查看與回復(fù)模塊設(shè)計
1.8.1 帖子查看與回復(fù)模塊概述
論壇帖子最主要的作用就是解決發(fā)帖人的問題,或其他瀏覽者能夠回復(fù)發(fā)帖人,實現(xiàn)討論的目的,同時,也能夠?qū)⒂懻摻Y(jié)果分享給其他人瀏覽。所以這就少不了某一帖子的查看與回復(fù)功能。帖子查看與回復(fù)模塊效果如圖1.19所示。

圖1.19 帖子查看與回復(fù)
1.8.2 帖子查看與回復(fù)模塊技術(shù)分析
程序源論壇中的各個模塊都是使用ASP.NET MVC模式實現(xiàn)的,本節(jié)對ASP.NET MVC的請求過程進行講解。
當(dāng)在瀏覽器中輸入一個有效的請求地址,或者通過網(wǎng)頁上的某個按鈕請求一個地址時,ASP.NET MVC通過配置的路由信息找到最符合請求的地址,如果路由找到了合適的請求,訪問先到達控制器和Action方法,控制器接收用戶請求傳遞過來的數(shù)據(jù)(包括URL參數(shù)、Post參數(shù)、Cookie等),并做出相應(yīng)的判斷處理,如果本次是一次合法的請求并需要加載持久化數(shù)據(jù),那么通過Model實體模型構(gòu)造相應(yīng)的數(shù)據(jù)。在響應(yīng)用戶階段可返回多種數(shù)據(jù)格式,分別如下:
返回默認(rèn)View(視圖),即與Action方法名相同。
返回指定的View,但Action必須屬于該控制器下。
重定向到其他的View(視圖)。
例如,當(dāng)一個用戶在瀏覽器中輸入并請求了“http://localhost/Home/Index”地址,程序會先執(zhí)行路由匹配,然后轉(zhuǎn)到Home控制器,再進入Index方法中。
1.8.3 帖子查看與回復(fù)模塊實現(xiàn)過程
本模塊使用的數(shù)據(jù)表:tb_ForumMain、tb_ForumSecond、tb_ForumClassify、tb_UsersByCustomer、tb_ZY_Sex
1. 查看帖子
查看帖子信息包含發(fā)帖人信息、主帖標(biāo)題、主帖內(nèi)容以及發(fā)帖時間等,如果主帖中已經(jīng)有跟帖回復(fù),則需要將跟帖信息讀取并綁定在帖子頁面中。
首先,定義查看帖子的控制器處理動作,方法名稱為SecondContent。同樣,加載某一帖子數(shù)據(jù)時,需要提供主帖id才能讀取,并且如果跟帖數(shù)據(jù)較多,還會采用分頁的方式加載跟帖數(shù)據(jù)。控制器的方法定義如下:
例程34 代碼位置:資源包\TM\01\BBSSiteItem\BBSSite\BBSSite\Controllers\HomeController.cs

在視圖文件中,主要對發(fā)帖主題和跟帖信息進行數(shù)據(jù)綁定。下面是這兩部分布局代碼標(biāo)簽的定義,代碼如下:
例程35 代碼位置:資源包\TM\01\BBSSiteItem\BBSSite\BBSSite\Views\Home\SecondContent.cshtml

上面布局代碼中使用table一行多列的方式分別綁定了發(fā)帖人信息、發(fā)帖時間以及帖子主題等數(shù)據(jù)。這是第一行固定的數(shù)據(jù)信息。那么,跟帖數(shù)據(jù)的綁定同樣在table中進行。通過foreach循環(huán)遍歷跟帖集合數(shù)據(jù),每一條回復(fù)信息產(chǎn)生一個新的tr(新行)。這樣,就形成了一個跟帖列表。布局代碼如下:
例程36 代碼位置:資源包\TM\01\BBSSiteItem\BBSSite\BBSSite\Views\Home\SecondContent.cshtml

每一條回帖同樣包含了回帖人的信息,與發(fā)帖人并列放置在了第一列。接著,第二列(td)是放置回帖信息內(nèi)容列,代碼如下:
例程37 代碼位置:資源包\TM\01\BBSSiteItem\BBSSite\BBSSite\Views\Home\SecondContent.cshtml

如圖1.20所示為發(fā)帖信息,回帖效果如圖1.21所示。

圖1.20 查看發(fā)帖

圖1.21 查看回帖
2. 回復(fù)主帖
回復(fù)主帖是針對樓主的發(fā)帖主題進行相關(guān)回復(fù)的討論過程,但只有登錄的用戶才可以進行回帖。與發(fā)帖相同,這里使用第三方富文本編輯器來編輯回帖信息。
創(chuàng)建富文本編輯器的方式與發(fā)帖時相同,這里主要講解如何實現(xiàn)回帖的過程。當(dāng)用戶單擊“回復(fù)帖子”按鈕時將會觸發(fā)js定義的subForm方法進行提交數(shù)據(jù)前的處理工作,代碼如下:
例程38 代碼位置:資源包\TM\01\BBSSiteItem\BBSSite\BBSSite\Views\Home\SecondContent.cshtml

在subForm方法中首先檢測用戶是否已經(jīng)登錄,如果未登錄則提示用戶是否登錄。所以,這里限制了只有登錄的用戶才能進行回帖,如果用戶已經(jīng)登錄,則檢測用戶輸入的回帖信息是否有效,然后將文本數(shù)據(jù)賦值給一個id名稱為“ueditor_textarea_content”的textarea控件。最后,返回true。
在綁定富文本編輯器時,使用了Html.BeginForm方法指定了HomeSave控制器的ReplyContent動作方法,所以數(shù)據(jù)會被提交到該控制器指定的動作中。ReplyContent方法代碼如下:
例程39 代碼位置:資源包\TM\01\BBSSiteItem\BBSSite\BBSSite\Controllers\HomeSaveController.cs

如圖1.22所示,編輯好要回復(fù)的內(nèi)容后,然后單擊“回復(fù)帖子”按鈕即可完成回帖功能。

圖1.22 回復(fù)主帖
3. 回復(fù)某一樓層
除了回復(fù)主帖外,還可以針對某一樓層的回復(fù)進行回復(fù),實現(xiàn)局部的討論功能。在定義ReplyContent方法時,代碼中使用了ReplySequenceID變量,從注釋說明中可以看出,如果這個變量沒有接收到前端傳遞過來的ReplySequenceID參數(shù)值或值為0則表示當(dāng)前回復(fù)的是主帖,如果該值有效(大于0),則表示當(dāng)前回復(fù)的是某一樓層。所以,所有回復(fù)工作都是由ReplyContent動作方法完成的。
既然后臺控制器動作中實現(xiàn)了回復(fù)功能,接下來看一下前臺頁面上該如何實現(xiàn)回復(fù)的功能。在布局頁面標(biāo)簽時就已經(jīng)定義了“回復(fù)此樓”按鈕,按鈕的onlick事件指定了Replying方法,并傳入了當(dāng)前樓層的回復(fù)id。
Replying方法定義在了Content文件夾下的js文件夾內(nèi)。方法定義如下:
例程40 代碼位置:資源包\TM\01\BBSSiteItem\BBSSite\BBSSite\Content\js\SecondContent.js

當(dāng)單擊“回復(fù)此樓”之后會彈出如圖1.23所示的回復(fù)窗口。

圖1.23 回復(fù)樓層
4. 綁定樓層回復(fù)
當(dāng)樓層回復(fù)的功能完成之后,接下來就是呈現(xiàn)樓層中回復(fù)的內(nèi)容。因為所有的回復(fù)都是在某一樓層中發(fā)生,所以,該部分布局標(biāo)簽一定是定義在樓層中的某一容器內(nèi)。
在查看帖子一節(jié)中,布局回復(fù)帖子標(biāo)簽時,在綁定回復(fù)內(nèi)容的div標(biāo)簽下面有一處注釋內(nèi)容,標(biāo)記為“<!--此處為預(yù)留布局-->”。那么綁定樓層回復(fù)的布局標(biāo)簽就是定義在該位置區(qū)域的。布局標(biāo)簽定義如下:
例程41 代碼位置:資源包\TM\01\BBSSiteItem\BBSSite\BBSSite\Views\Home\SecondContent.cshtml

布局后的呈現(xiàn)效果如圖1.24所示。

圖1.24 樓層內(nèi)回復(fù)
- 網(wǎng)絡(luò)科學(xué)視角下的推薦系統(tǒng)研究
- Axure RP 原型設(shè)計實踐(Web+APP)
- 深度實踐微服務(wù)測試
- 大數(shù)據(jù)安全
- 計算機網(wǎng)絡(luò)技術(shù)基礎(chǔ)(第2版)
- Getting Started with Ghost
- 矛與盾:黑客攻防與腳本編程
- 深入淺出Vue.js
- 云計算架構(gòu)技術(shù)與實踐(第2版)
- Cisco Unified Communications Manager 8:Expert Administration Cookbook
- 計算機網(wǎng)絡(luò)
- Wireshark網(wǎng)絡(luò)分析從入門到實踐
- 信號與信息
- 信息安全技術(shù)
- 華為云計算技術(shù)與應(yīng)用