You try to render hierarchical tree, there are plenty ways to do this in ASP.NET MVC. You can use partial view for this as follows.
Here is your simple hierarchical model
public class HierarchicalModel
{
public HierarchicalModel()
{
this.Children = new List<HierarchicalModel>();
}
public String Name { get; set; }
public List<HierarchicalModel> Children { get; set; }
}
then in one of actions you create/fetch your model and put it in a viewbag.
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();
}
Now you need to create a partial view named e.g. _HierarchicalModel.cshtml in Views/Shared directory. Replace MvcApplication4 by the namespace where your model is located.
@model MvcApplication4.HierarchicalModel
<li>
@Model.Name
<ul>
@foreach (var item in Model.Children)
{
@Html.Partial("_HierarchicalModel", item);
}
</ul>
</li>
and then you render it in your view.
@{
MvcApplication4.HierarchicalModel model = ViewBag.HierarchicalModel;
}
<p>
<ul>@Html.Partial("_HierarchicalModel", model)</ul>
</p>
This is a simplest way to do this. In any case you have to care about cyclic reference and deep hierarchies.