Самоссылающаяся иерархическая привязка данных - PullRequest
1 голос
/ 07 февраля 2012

Я использую расширения для ASP.NET MVC Q3 2011 (версия с открытым исходным кодом) с движком Razor и архитектурой Asp.net MVC3.Я хочу привязать сетку к сущности в моей базе данных, которая имеет самоссылающуюся структуру (например, дерево).Поэтому я не могу определить это как примеры с фиксированными уровнями, потому что я не знаю, сколько уровней в этой сетке.Итак, я хочу динамически привязать свою сетку к модели.

 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 Ответ

1 голос
/ 07 февраля 2012

Вы не можете сделать это автоматически, вам нужна итерация 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(....);
    })

)

Надеюсь на помощь.

...