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>, я чувствую, что они тоже не правы.
Пожалуйста, помогите мне, я застрял с этим в течение нескольких дней.