2011-07-06 12 views
0

私は、ASP.NETがMVCプログラムのビュー部分を歩き回るようにする再帰的なデータ構造を持っています。これが可能かどうかは私には分かりません。以下は、C#のモデルクラスの定義です。MVCの再帰的な機能aspxのページを表示

Public class recursive_data_structure 
{ 
    public List<recursive_data_structure> Children; 
    //some_class is defined elsewhere, it is irrelevant 
    public some_class Me; 
} 

ViewModelには、このクラスのインスタンスが含まれています。再帰的なHTML生成を行うことができるように、MVCを使用してモデルを歩く方法がASP.NETにありますか?

この質問の文句が間違っているか明らかでない場合は、お詫び申し上げます。私はMVCがとても新しいです。

答えて

4

階層ツリーをレンダリングしようとすると、ASP.NET MVCでこれを行う方法がたくさんあります。これには以下のようにパーシャルビューを使用することができます。ここで

はあなたのシンプルな階層モデルは、あなたが/あなたのモデルを取得し、viewbagに入れて作るのいずれかの操作で、その後

public class HierarchicalModel 
{ 
    public HierarchicalModel() 
    { 
     this.Children = new List<HierarchicalModel>(); 
    } 

    public String Name { get; set; } 
    public List<HierarchicalModel> Children { get; set; } 
} 

です。

public ActionResult Index() 
{ 
    ViewBag.Message = "Welcome to ASP.NET MVC!"; 

    var level0 = new HierarchicalModel() { Name = "item 0, level 0" }; 
    level0.Children.Add(new HierarchicalModel() { Name = "item 0, level 1" }); 
    level0.Children.Add(new HierarchicalModel() { Name = "item 1, level 1" }); 
    level0.Children.Add(new HierarchicalModel() { Name = "item 2, level 1" }); 
    var level1 = new HierarchicalModel() { Name = "item 3, level 1" }; 
    level1.Children.Add(new HierarchicalModel() { Name = "item 0, level 2" }); 
    level1.Children.Add(new HierarchicalModel() { Name = "item 1, level 2" }); 
    level0.Children.Add(level1); 

    ViewBag.HierarchicalModel = level0; 

    return View(); 
} 

ここでは、例という名前の部分図を作成する必要があります。ビュー/共有ディレクトリの_HierarchicalModel.cshtml。モデルが配置されている名前空間でMvcApplication4を置き換えます。

@model MvcApplication4.HierarchicalModel 
<li> 
    @Model.Name 
    <ul> 
    @foreach (var item in Model.Children) 
    { 
     @Html.Partial("_HierarchicalModel", item); 
    }  
    </ul> 
</li> 

これをビューでレンダリングします。

@{ 
    MvcApplication4.HierarchicalModel model = ViewBag.HierarchicalModel; 
} 

<p> 
    <ul>@Html.Partial("_HierarchicalModel", model)</ul> 
</p> 

これはこれを行う最も簡単な方法です。いずれにしても、循環参照と深い階層を気にする必要があります。

+0

MvcApplication4は正確に何を表していますか? – Peter

+1

プロジェクト名です。あなたのケースでは、モデルが存在する完全な名前空間に置き換えてください。あなたはまた、指導者 '@使用Your.Namespace;を使用してカミソリを追加することができます ここであなたはそれについてもっと読むことができます[link] http://stackoverflow.com/questions/3239006/how-to-import-a- namespace-in-razor-view-page – aruss

1

私の知る限り、MVCは自動的に再帰構造体をウォークしません。

ListまたはIEnumerableの部分ビューとrecursive_data_structureの部分ビューを作成するだけです。

@foreach (recursive_data_structure child in Model) 
{ 
    @Html.Partial("recursive_data_structureView", child) 
} 

そしてrecursive_data_structureモデルのためのあなたの部分図:IEnumerableをモデルのためのあなたの部分図で

<span>Model</span> 

あなたは再帰的なデータにバインドツリービューをしたい場合は、Telerikは一つとしてを持っています無料のMVCパッケージの一部。

関連する問題