當前位置:
首頁 > 知識 > MVC通過遞歸+部分視圖實現評論

MVC通過遞歸+部分視圖實現評論

前一個項目里有一個關於評論系統的需求。感覺這個評論的實現還是蠻好玩的,所以記錄下這個系統的實現相關內容。

功能需求:

1、用戶可以再視屏下方留言。

2、用戶可以再別的用戶留言下方回復。

3、用戶可以刪除自己的留言,刪除之後所有屬於這個留言的子留言都會被刪除。

分析:

看到上面這個需求的時候,想法是可以把這個留言內容作為一個「留言樹」,一個留言就是一個根節點,然後留言下方的回復就是根節點下方的位元組點。回復的回復就是子節點的子節點。

所以資料庫的設計就要提現這幾個要素:①父節點標記 ②本身節點標記 ③標記時間(用於區分兩個兄弟節點誰先誰後)

MVC通過遞歸+部分視圖實現評論

「SourseID」表示這個評論所屬哪個課件資源。

接下來是樹的生成了,主要的設計思路如下:

1、當需要課件A的評論樹的時候,先從資料庫中取出所有「SourseId」為課件A的評論數據,把上述數據放入隊列Queue中,並定義一個空的樹Tree

2、Queue出隊一個數據D,數據D在Tree中通過遞歸逐層查詢自己的父節點,如果找到父節點就在Tree相應位置插入數據D,如果沒有找到就把D再入隊Queue中。

3、重複2的操作,直至Queue空隊

代碼如下:

///

/// 獲取頁面視圖所需要的評論樹
///

///
public List GetCommentsForView(int SourseId)
{
List trees = new List;
List comments = dal.SelectCommentInfs($" AND C.SourseID ="{SourseId}"");
Queue queues = new Queue(comments);
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 trees, CommentInfEntity queue)
{
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;
}

這樣子最後的Tree就獲得了。

然後在視圖裡面就可以用Html.RenderPartial來顯示了

@foreach (CommentTree tree in ViewBag.CommentInf)
{

@(tree.Node.Name):@(tree.Node.Comments)

foreach (var node in tree.Branch)
{
Html.RenderPartial("../Course/CommentParyial", node);
}
}

部分視圖:

@Model.Node.Name 回復 @Model.Node.PName:@Model.Node.Comments

@foreach (var node in Model.Branch)
{
Html.RenderPartial("../Course/CommentParyial", node);
}

上述部分視圖也是用了遞歸的方法。

首先在頁面上面顯示根節點Node,然後把子節Child點發送給部分視圖頁面,部分視圖頁面獲得數據後,把得到的子節Child點作為根節點顯示,然後把Child的子節點發送給部分視圖。。。。。最後直至數據結束,

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

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業務合併 並裁汰部分員工