9

厳密に型指定された 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 > タグについてもよくわかりません。それらも間違っていると思います。

助けてください、私はこれで何日も立ち往生しています。

4

2 に答える 2