I have a list of categories and sub categories which is passing from controller to the view. Now, I want them to be represented in the HTML like following. But, I dont know how can i achieve this by using foreach or table or whatever.

EDIT : Code
public ActionResult Electronics()
{
var topCategories = pe.Categories.Where(category => category.ParentCategory.CategoryName == "Electronics").ToList();
//var catsAndSubs = pe.Categories.Include("ParentCategory").Where(c => c.ParentCategory.CategoryName == "Electronics");
return View(topCategories);
}
With this view code, I am just able to pull a vertical list.
@foreach (var cats in Model)
{
<li>@cats.CategoryName</li>
foreach (var subcats in cats.SubCategories)
{
<li>@subcats.CategoryName</li>
}
}
When designing HTML mark-up it is very important to consider semantics. What meaning are you trying to convey? That doesn’t look like tabular data to me so please don’t put it in tables 😛
Based on your wireframe above, the way I would probably structure this is like this:
Adjust the hX tags to reflect their position within the document’s hierachy. Remember to only ever have ONE h1 per page (or per <acticle>, or <section> if using HTML5).
If instead you wind up turning this into something like a Superfish menu then this is the markup that you would use:
Edit
Your model is not suitable for creating your desired view, the relationship is bottom-up, but to conveniently construct the view you will want the relationships defined top-down. You need to start by converting the data model into a view model, such as:
and to make this:
Then your view:
Category partial:
Note that my current solution only supports 2 levels of categories (as per your wireframe). It could however be easily extended to be recursive.