小编use*_*422的帖子

ASP.NET MVC 4生成具有递归局部视图的树视图

我在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

9
推荐指数
1
解决办法
2万
查看次数