2012-01-20 6 views
0

그래서 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; 
} 

이제 내보기에서 재귀를 사용하여 내가 선택한 템플릿의 각 범주에서 침을 뱉을 것을 제안합니까? 보기에서 이런 식으로하는 방법을 잘 모르겠습니다.

답변

1

당신은 재귀 디스플레이 템플릿을 사용할 수 있습니다

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

당신은 또한 측면에서 following post 유용을 찾을 수 있습니다 :

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

을 다음 범주에 대한 사용자 지정 디스플레이 템플릿 (~/Views/Shared/DisplayTemplates/CategoriaModel.cshtml)를 정의 코드 및 데이터 액세스를 최적화합니다.

+0

감사합니다. :) 한 번 더, 나는 SQL 녀석이 아니에요. 재귀 외래 키 스키마를 사용하고 제안한 링크와 같이 중첩 세트를 사용하는 것의 성능 차이는 얼마나됩니까? 감사! –

-1

메서드 내에서 MvcHtmlString.Create()를 사용하여 직접 출력을 시도하거나 면도기를 사용하여 UI의 메서드에 액세스하는 도우미를 만들 수 있습니다.