Родительский дочерний список в MVC3 Razor - PullRequest
0 голосов
/ 18 февраля 2012

Я пытаюсь отобразить вложенный список продуктов Parent \ Child.В моей таблице есть поле Id и поле ParentId.У меня есть список <> объектов Product, и теперь я хочу отобразить его в представлении.Я придумал следующее решение, но уверен, что есть лучшее.

Мое решение:

Я знаю имена основных продуктов \ групп, поэтому, просматривая массив этих имен, я запрашиваю Список <> продуктов для Product.Name that == элемент массива.Как только я нахожу это,

я начинаю неупорядоченный список

  • Product.Name

    Найти любые дочерние элементы, запрашиваяСписок <> продуктов для любых записей, которые имеют ParentId == Product.Id.Если таковые имеются, я в значительной степени повторяю этот процесс, но на этот раз использую дочерний продукт в качестве родительского и ищу его детей.Когда в Продукте больше нет дочерних элементов, я закрываю элемент списка

Даже если это работает, сейчас я знаю, что мой список не будет глубже трех уровней, поэтомуЯ только закодировал для этого значения, что ребенка великого папы никогда не увидят.Я хотел бы сделать так, чтобы это углубилось, как это должно быть.Есть мысли?

Спасибо

1 Ответ

0 голосов
/ 18 февраля 2012

Вы пробовали что-то подобное?

В режиме основного представления визуализируйте продукты без родителя:

@Html.Action("DisplayChildren", "ControllerName", new { parentId = null })

В частичном представлении рекурсивно визуализируйте потомство:

@model IEnumerable<Product>
<ul>
    @foreach (var child in Model)
    {
        <li>
            @Html.DisplayFor(m => child.Name)
            @Html.Action("DisplayChildren", "ControllerName", 
                new { parentId = child.Id })
        </li>
    }
</ul>

В контроллере вернуть только прямые дочерние элементы:

public ActionResult DisplayChildren(int? parentId)
{
    var children = GetDirectChildrenOf(parentId);
    if (children.Count() > 0)
        return PartialView(children);
    else return new EmptyResult();
}
...