ASP.NET MVC 4 генерирует древовидное представление с рекурсивным частичным представлением
У меня есть частичное представление в проекте MVC 4, который строго типизирован. Требуется IEnumerable коллекция таблицы базы данных. В этой таблице есть идентификаторы, имена и идентификаторы родителей для хранения иерархической связи между записями. Представление, которое вызывает частичное представление, также строго типизировано, оно берет всю базу данных в качестве модели и передает таблицу Categories в частичное представление как перечисляемую коллекцию:
@Html.Partial("_TreeCategories", @Model.Categories.ToList())
А в частичном представлении я хочу сначала взять корневые узлы, чтобы я мог рекурсивно расширить все дерево. В таблице базы данных все записи рассматриваются как корневые узлы с нулевым ParentID ==.
В общем, мой способ сделать это будет выглядеть так:
@model IEnumerable
@if (Model.ToList().Count >= 0)
{
@if (Model.ToList()[0].Parent_id == null)
{
}
@foreach (var node in @Model)
{
<a href="[email protected]">@node.Name</a>
@foreach (var subNode in @Model.Where(s => s.Parent_id == node.Id))
{
@Html.Partial("_TreeCategories", subNode)
}
}
@if (Model.ToList()[0].Parent_id == null)
{
}
}
Поэтому я проверяю, если первый элементs ParentID модели равен нулю, и если это так, то он должен создать < уль> тег с идентификатором "навигация»поэтому плагин jquery может распознать, что он предназначен для управления древовидной структурой. Затем он создает тег списка с рекурсивным вызовом внутри. Рекурсивно вызванное частичное представление берет дочерние узлы в качестве модели. И, наконец, если мы добрались до конца частичного представлениярендеринга, и мы находимся накорневой уровень ", он должен написать закрытие < уль> тег
Однако есть некоторые проблемы. Во-первых, в конце, что закрытие тега неупорядоченного списка неверно, VS может 'найти соответствующий начальный тег для этого. Во-вторых, я нене знаю почему, но сверху я могу поставить стартер < уль> тег между тегами, и я могусделать это в закрывающем теге ниже. Но я'я не уверен в этом < ul> теги тоже, я чувствую, что они тоже не правы.
Пожалуйста, помогите мне, яЯ застрял с этим в течение нескольких дней.