自我引用分层数据绑定

时间:2012-02-07 14:02:50

标签: asp.net-mvc-3 fluent-nhibernate telerik-grid telerik-mvc

我使用Razor引擎和Asp.net MVC3架构的ASP.NET MVC Q3 2011 Extensions(开源版本)。 我想将网格绑定到我的数据库中的实体,该实体具有自引用结构(如树)。因此,我不能像固定级别的示例那样定义它,因为我不知道此网格有多少级别。所以,我想动态地将我的网格绑定到模型。

 public class Category : Entity
{
    public virtual int Id {private set; get; }
    public virtual string Title { set; get; }
    public virtual string Description { set; get; }
    public virtual string ParentsPath { set; get; }
    public virtual IList<Category> Children { get; private set; }
    public virtual Category Parent { get; set; }

 }

我也使用Fluent NHibernate,因此我将孩子和父母存储在我的实体中。

有办法做到这一点吗?我在文件中找不到任何东西。 我错过了什么吗?因为在Ajax和Winform组件中,它已经实现了。

感谢。

1 个答案:

答案 0 :(得分:1)

您无法自动执行此操作,您需要进行foreach迭代并生成项目,然后手动将它们添加到树中。

当我需要显示层次结构时,我为PanelBar做了这​​个。

以下是一个例子:

@(Html.Telerik().PanelBar()
.Name("Details")
.ExpandMode(PanelBarExpandMode.Multiple)    
.Items(items =>
    {
        var parent = Model.ParentWorkItem;
        List<WorkItem> lst = new List<WorkItem>();

        while (parent != null)
        {
            lst.Add(parent);
            parent = parent.ParentWorkItem;
        };
        for (int i = lst.Count-1; i >=0;i-- )
        {
            parent = lst[i];
            items.Add()                    
                .Expanded(false)
                .Text("...")
                .LoadContentFrom(...);
        }
        items.Add()
            .Expanded(true)
            .Text(...)
            .Content(....);
    })

希望有所帮助。