我在MVC 4项目中有一个局部视图,它是强类型的.它需要一个数据库表的IEnumerable集合.在该表中,存在用于存储记录之间的分层连接的ID,名称和父ID.调用局部视图的视图也是强类型的,它将整个数据库作为模型,并将Categories表作为可枚举集合传递给局部视图:
@Html.Partial("_TreeCategories", @Model.Categories.ToList())
Run Code Online (Sandbox Code Playgroud)
在局部视图中,我想首先获取根节点,因此我可以以递归方式扩展整个树.在数据库表中,所有记录都被视为具有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>
}
}
Run Code Online (Sandbox Code Playgroud)
所以我检查Model的第一个元素的ParentID是否为null,如果是,那么它应该创建一个id为"navigation"的<ul>标记,这样jquery插件就可以识别出它是一个树视图控件.然后它创建一个带有递归调用的列表标记.递归调用的局部视图将节点的子节点作为模型.最后,如果我们到达部分视图渲染的末尾,并且我们处于"根级别",它应该写一个结束<ul>标记
但是,有一些问题.首先,最后,关闭无序列表标记是错误的,VS无法找到匹配的开始标记.其次,我不知道为什么,但在顶部,我可以在标签之间放置起始<ul>标签,我不能在下面的结束标签处进行.但我也不确定这些<ul>标签,我觉得这些也是错的.
拜托,帮助我,我已经坚持了好几天了.
asp.net-mvc treeview recursion asp.net-mvc-partialview asp.net-mvc-4