Проблемы при обработке рекурсивного кода генерации категории - PullRequest
0 голосов
/ 20 января 2012

Итак, я построил рекурсивную функцию, которая генерирует коллекцию Category объектов.

[ChildActionOnly]
public ActionResult FindAllCategorias()
{
    var categoriasDb = _categoriaRepository.FindAllCategorias().Where(s => s.CategoriaPadreId == null);
    List<CategoriaModel> model = new List<CategoriaModel>();

    foreach (var categoria in categoriasDb)
    {
            model.Add(new CategoriaModel()
                            {
                                CategoriaId = categoria.CategoriaId,
                                Nombre = categoria.Nombre,
                                Encabezado = categoria.Encabezado
                            });
    }

    foreach (var categoriaModel in model)
    {
        categoriaModel.Subcategorias = FindSubcategoriesForCategory(categoriaModel.CategoriaId);
    }

    return PartialView(model);
}

private List<CategoriaModel> FindSubcategoriesForCategory(int id)
{
    var subcategorias = _categoriaRepository.FindAllCategorias().Where(c => c.CategoriaPadreId == id);

    List<CategoriaModel> subcategoriasModel = new List<CategoriaModel>();

    foreach (var subcategoria in subcategorias)
    {
        subcategoriasModel.Add(new CategoriaModel()
                                    {
                                        CategoriaId = subcategoria.CategoriaId,
                                        Nombre = subcategoria.Nombre,
                                        Encabezado = subcategoria.Encabezado,
                                        Subcategorias = FindSubcategoriesForCategory(subcategoria.CategoriaId)
                                    });
    }

    return subcategoriasModel;
}

Теперь, на мой взгляд, как вы предлагаете мне использовать рекурсию, чтобы выкладывать каждую категорию в шаблон, который я выбрал? Я не уверен, как что-то подобное в View.

Ответы [ 2 ]

1 голос
/ 20 января 2012

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

@model List<CategoriaModel>
<ul>
    @Html.DisplayForModel()
</ul>

, а затем определить пользовательский шаблон отображения для категории (~/Views/Shared/DisplayTemplates/CategoriaModel.cshtml):

@model CategoriaModel
<li>
    @Html.DisplayFor(x => x.Encabezado) ... and something else about the category  
    <ul>
       @Html.DisplayFor(x => x.Subcategorias)
    </ul>
</li>

Вы также можете найти следующий пост полезен с точки зрения оптимизации вашего кода и доступа к данным.

0 голосов
/ 20 января 2012

Вы можете попытаться создать свой вывод напрямую, используя MvcHtmlString.Create () в своих методах, или вы можете создать помощника для доступа к вашим методам в пользовательском интерфейсе с помощью бритвы.

...