ASP.NET MVC中的分层数据

时间:2008-09-12 01:54:56

标签: asp.net asp.net-mvc

我试图想出最好的方法,使用ASP.NET MVC将一些分层数据渲染到嵌套的无序列表中。有没有人有关于如何做到这一点的任何提示?

5 个答案:

答案 0 :(得分:1)

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

你实际上可以让treeview控件工作......但你必须将它包装在服务器端表单标签中才能运行。你将获得通常带来的肮脏(如生成的id和viewstate),但它将从渲染的角度来看。

如果你想创建标签并嵌套它们,使用foreach()循环就很容易了。

答案 1 :(得分:1)

我建议使用jquery树视图插件使其像树一样运行,但是对于渲染,只需将它放在一个递归的lambda帮助器中进行嵌套。

答案 2 :(得分:1)

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

答案 3 :(得分: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帮助器来渲染树。

答案 4 :(得分:0)

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