ASP.NET MVC 4 генерирует древовидное представление с рекурсивным частичным представлением

У меня есть частичное представление в проекте MVC 4, который строго типизирован. Требуется IEnumerable коллекция таблицы базы данных. В этой таблице есть идентификаторы, имена и идентификаторы родителей для хранения иерархической связи между записями. Представление, которое вызывает частичное представление, также строго типизировано, оно берет всю базу данных в качестве модели и передает таблицу Categories в частичное представление как перечисляемую коллекцию:

@Html.Partial("_TreeCategories", @Model.Categories.ToList())

А в частичном представлении я хочу сначала взять корневые узлы, чтобы я мог рекурсивно расширить все дерево. В таблице базы данных все записи рассматриваются как корневые узлы с нулевым ParentID ==.
В общем, мой способ сделать это будет выглядеть так:

@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="[email protected]">@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 первого элемента модели нулевым, и если это так, то он должен создать тег <ul> с идентификатором «navigation», чтобы плагин jquery мог распознать, что он предназначен для управления древовидной структурой. , Затем он создает тег списка с рекурсивным вызовом внутри. Рекурсивно вызванное частичное представление берет дочерние узлы в качестве модели. И наконец, если мы добрались до конца рендеринга частичного представления, и мы находимся на «корневом уровне», он должен написать закрывающий тег <ul>
Однако есть некоторые проблемы. Во-первых, в конце, закрытие неупорядоченного тега списка неверно, VS не может найти соответствующий стартовый тег для этого. Во-вторых, я не знаю почему, но вверху я могу поместить тег <ul> для начинающих между тегами, а я не могу сделать это в закрывающем теге ниже. Но я не уверен насчет этих тегов <ul>, я чувствую, что они тоже не правы.

Пожалуйста, помогите мне, я застрял с этим в течение нескольких дней.

Ответы на вопрос(2)

Ваш ответ на вопрос