官术网_书友最值得收藏!

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ù)

主站蜘蛛池模板: 勐海县| 革吉县| 丽江市| 新巴尔虎左旗| 临夏县| 河津市| 景宁| 雅安市| 柞水县| 靖江市| 右玉县| 扶风县| 余庆县| 禹州市| 新蔡县| 丰县| 成都市| 北宁市| 易门县| 肇源县| 阿坝县| 福建省| 萨嘎县| 镇江市| 伊吾县| 孝昌县| 望谟县| 大同市| 鞍山市| 晋江市| 芜湖市| 卓资县| 漠河县| 南涧| 和田市| 龙山县| 京山县| 定远县| 怀来县| 武宣县| 遂宁市|