That's completely the wrong way of doing MVC. Your controller passes data to the view and it is up to the view to decide how that data is rendered, you don't generate html in your controller as that completely breaks the paradigm.
So create a data model that represents your data (like a list of child\parent objects) and use the view to represent them as html.
Model
public class MenuModel
{
public string Name { get; set; }
public List<MenuModel> Children { get; set; }
}
Controller
public ActionResult Index()
{
List<MenuModel> model = new List<MenuModel>();
model.Add(new MenuModel { Name = "Sale", Children = new List<MenuModel> {
new MenuModel { Name = "Add sale" },
new MenuModel { Name = "View sale" },
new MenuModel { Name = "Delete sale" } } });
model.Add(new MenuModel { Name = "Product", Children = new List<MenuModel> {
new MenuModel { Name = "Add product" },
new MenuModel { Name = "View product" } } });
return View(model);
}
View
@model List<MenuModel>
<ul>
@foreach (var menuItem in Model)
{
<li>@menuItem.Name</li>
if(menuItem.Children != null && menuItem.Children.Any())
{
<ul>
@foreach (var childItem in menuItem.Children)
{
<li>@childItem.Name</li>
}
</ul>
}
}
</ul>