厳密に型指定された MVC 4 プロジェクトの部分ビューがあります。データベースのテーブルの IEnumerable コレクションを取ります。そのテーブルには、レコード間の階層接続を格納するための ID、名前、および ParentID があります。部分ビューを呼び出すビューも厳密に型指定されており、データベース全体をモデルとして取り、Categories テーブルを列挙可能なコレクションとして部分ビューに渡します。
@Html.Partial("_TreeCategories", @Model.Categories.ToList())
部分ビューでは、最初にルート ノードを取得して、ツリー全体を再帰的に拡張できるようにします。データベース テーブルでは、すべてのレコードが ParentID == null を持つルート ノードと見なされます。
したがって、一般的に、これを行う私の方法は次のようになります。
@model IEnumerable<TreeCollections.OpenAccess.Category>
@if (Model.ToList().Count >= 0)
{
@if (Model.ToList()[0].Parent_id == null)
{
<text><ul id="navigation"></text>
}
@foreach (var node in @Model)
{
<li><a href="?@node.Id">@node.Name</a>
@foreach (var subNode in @Model.Where(s => s.Parent_id == node.Id))
{
@Html.Partial("_TreeCategories", subNode)
}
</li>
}
@if (Model.ToList()[0].Parent_id == null)
{
</ul>
}
}
そのため、モデルの最初の要素の ParentID が null であるかどうかを確認し、null である場合は、id "navigation" を持つ < ul> タグを作成する必要があるため、jquery プラグインはそれがツリービュー コントロールであることを認識できます。 . 次に、再帰呼び出しを含むリスト タグを作成します。再帰的に呼び出された部分ビューは、ノードの子をモデルとして受け取ります。最後に、部分ビューのレンダリングの最後に到達し、「ルート レベル」にいる場合は、終了 < ul> タグを記述する必要があります。
ただし、いくつかの問題があります。まず、最後に、順序付けられていないリストタグを閉じるのは間違っています.VSはそれに一致する開始タグを見つけることができません. 2 つ目は、理由はわかりませんが、先頭の < ul> タグをタグの間に入れることができますが、下の終了タグではできません。しかし、これらの < ul > タグについてもよくわかりません。それらも間違っていると思います。
助けてください、私はこれで何日も立ち往生しています。