2012-01-20 11 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 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> 

あなたはまたの面でfollowing post便利を見つけることができますコードとデータへのアクセスを最適化します。

+0

ありがとうございました。 :)もう1ビット、私はSQLの男ではない、私は取得するだけで十分に知っている。再帰的な外部キースキーマを使用する場合と、ネストされたセットを使用する場合のパフォーマンスの差はどれくらいですか?ありがとう! –

-1

あなたのメソッド内でMvcHtmlString.Create()を使用して直接出力を試してみることもできます。または、手を使ってuiのメソッドにアクセスするためのヘルパーを作成できます。

関連する問題