2

我正在尝试使用 ASP.NET MVC 将一些分层数据呈现到嵌套无序列表中的最佳方法。有没有人有关于如何做到这一点的任何提示?

4

5 回答 5

1

你的意思是......你想要某种树状视图?

你实际上可以让树视图控件工作......但你必须将它包装在服务器端表单标签中才能运行。你会得到通常带来的麻烦(比如生成的 id 和视图状态),但它会从渲染的角度工作。

如果您只想创建标签并嵌套它们,那么使用 foreach() 循环会很容易。

于 2008-09-12T02:11:36.463 回答
1

我建议使用 jquery 树视图插件使其像树一样运行,但对于渲染,只需将其放入递归 lambda 助手中即可进行嵌套。

于 2008-09-12T05:11:29.167 回答
1

我相信目前没有这样的控制...... TreeViews本质上是复杂的。当然,您可以使用各种重复器和循环尽可能多地“绘制”层次结构,但是要实现类似于 Web 表单工具箱中的树视图的功能……您必须等待!

于 2008-11-11T12:16:08.910 回答
1

为什么不将模型以树的形式传递给视图?

/// This is the model class
public class MyTreeNode<T>
{
    public ICollection<MyTreeNode> ChildNodes {get;}
    public T MyValue { get; set; }
    bool HasChildren { get { return ChildNodes.Any(); } }
}

///This is the html helper:
public static string RenderTree<T>(this HtmlHelper html, MyTreeNode<T> root, Func<T, string> renderNode)
{
    var sb = new StringBuilder();
    sb.Append(renderNode(root.MyValue));
    if (root.HasChildren)
    {
        foreach(var child in root.ChildNodes)
        {
            sb.Append(RenderTree<T>(html, child, renderNode));
        }
    }
    return sb.ToString();
}

我实际上并没有测试这段代码,但它是关于这个想法的。您可以想象创建自己的递归 html 助手来渲染树。

于 2008-11-11T20:37:22.610 回答
0

为此(渲染分层菜单、树视图等),我使用自定义组件的递归调用(ascx 或新预览中的 aspx5)。
我给组件第一级项目(项目列表),然后组件检查列表中的每个项目是否有任何子项目,并使用该子项目的列表调用自身。
您可以在控制器中构建对象的层次图,或者只是具有 ParentID 属性的一维列表。

于 2008-09-15T20:39:18.240 回答