MVC通過遞歸+部分視圖實現評論
前一個項目里有一個關於評論系統的需求。感覺這個評論的實現還是蠻好玩的,所以記錄下這個系統的實現相關內容。
功能需求:
1、用戶可以再視屏下方留言。
2、用戶可以再別的用戶留言下方回復。
3、用戶可以刪除自己的留言,刪除之後所有屬於這個留言的子留言都會被刪除。
分析:
看到上面這個需求的時候,想法是可以把這個留言內容作為一個「留言樹」,一個留言就是一個根節點,然後留言下方的回復就是根節點下方的位元組點。回復的回復就是子節點的子節點。
所以資料庫的設計就要提現這幾個要素:①父節點標記 ②本身節點標記 ③標記時間(用於區分兩個兄弟節點誰先誰後)
「SourseID」表示這個評論所屬哪個課件資源。
接下來是樹的生成了,主要的設計思路如下:
1、當需要課件A的評論樹的時候,先從資料庫中取出所有「SourseId」為課件A的評論數據,把上述數據放入隊列Queue中,並定義一個空的樹Tree
2、Queue出隊一個數據D,數據D在Tree中通過遞歸逐層查詢自己的父節點,如果找到父節點就在Tree相應位置插入數據D,如果沒有找到就把D再入隊Queue中。
3、重複2的操作,直至Queue空隊
代碼如下:
///
///
/// ///
///
/// 這樣子最後的Tree就獲得了。 然後在視圖裡面就可以用Html.RenderPartial來顯示了 @foreach (CommentTree tree in ViewBag.CommentInf) @(tree.Node.Name):@(tree.Node.Comments) foreach (var node in tree.Branch) 部分視圖:
@Model.Node.Name 回復 @Model.Node.PName:@Model.Node.Comments @foreach (var node in Model.Branch) 上述部分視圖也是用了遞歸的方法。 首先在頁面上面顯示根節點Node,然後把子節Child點發送給部分視圖頁面,部分視圖頁面獲得數據後,把得到的子節Child點作為根節點顯示,然後把Child的子節點發送給部分視圖。。。。。最後直至數據結束,
public List
{
List
List
Queue
while(queues.Count!=0)
{
CommentInfEntity c = queues.Dequeue;
if (c.PId == 0)
{
CommentTree tree = new CommentTree;
tree.Node = c;
tree.Branch = new List
trees.Add(tree);
trees = trees.OrderBy(x => x.Node.CommentTime).ToList;
}
else if (c.PId != 0)
{
c.PName = comments.Where(x => x.Id == c.PId).FirstOrDefault.Name;
if (!ParentIsExist(trees,c))
{
queues.Enqueue(c);
}
}
}
return trees;
}
///
///
private bool ParentIsExist( List
{
for(int i=0;i
t.Node = queue;
trees[i].Branch.Add(t);
trees[i].Branch = trees[i].Branch.OrderBy(x => x.Node.CommentTime).ToList;
return true;
}
else
{
if (ParentIsExist(trees[i].Branch, queue))
{
return true;
}
}
}
return false;
}
{
{
Html.RenderPartial("../Course/CommentParyial", node);
}
}
{
Html.RenderPartial("../Course/CommentParyial", node);
}
※14:40-15:00博客站點web伺服器雪崩似的CPU 100%
※Elasticsearch學習隨筆(一)——原理理解與5.0核心插件部署過程
※net 中web.config一個配置文件解決方法 (其他配置文件引入方式)
TAG:達人科技 |
※AppStore出現故障,部分評分和評論消失
※和弦 CHORD HUGO2 外置解碼器測評報告「二」耳機部分與外接數字輸入測評「Soomal」
※國外媒體OGTV對部分戰隊評分,RNG竟是這個等級?
※部分開發者已經收到HTC Vive專業版
※VR本周說:蘋果將推出MR而非AR設備,Valve裁掉部分VR相關員工
※在 KVM 中測試 IPv6 網路:第 2 部分
※BGP協議理論部分(1)
※硬體資訊:GCN你終於被換啦!AMD 7nm Naiv額構架核心部分規格泄露
※官方數據:部分CHERRY MX開關的數值解析 by 小電
※華為Mate20 Pro深度體驗《一》外觀和系統部分測評
※基於SLAMWARE解決方案如何集成機器人底盤部分
※部分單品售罄!KAWS X DIOR 系列正式發售
※從MCU到FPGA:第3部分
※前端開發(HTML+CSS靜態部分)
※希望下次能見到完整體啊…BLACKPINK部分成員確定出演《Running Man》!
※白話VOLTE各部分之IMS/SIP/SDP
※CINNO Research關於部分媒體報道中杜撰引用我司分析師觀點的澄清聲明
※VR前景被看淡 V社解僱部分VR項目組成員
※金色財經現場報道,MACLANE:隱私是人權的一部分
※HTC證實手機與VR業務合併 並裁汰部分員工