0

Below are the info.

No idea how to loop the SubNav item in the View. (Ref: Loop Through Multi-Level Dynamic Menus in Asp.Net MVC)

Controller

[ChildActionOnly]
    public PartialViewResult LoadNav()
    {
        var db = new NavDb();
        List<Nav> NavCol = db.Navs.ToList<Nav>();
        var navObj = CreateNavVM(0, NavCol);
        return PartialView("_PVTopNav", navObj);
    }
    public IEnumerable<NavViewModel> CreateNavVM(int pParentId, List<Nav> pNavCol)
    {
        return from m in pNavCol
               orderby m.DisplaySeq
               where m.ParentMenuId == pParentId
               select new NavViewModel()
               {
                   MenuId = m.MenuId,
                   Name = m.Name,
                   HtmlTitle = m.HtmlTitle,
                   Url = m.Url,
                   DisplaySeq = m.DisplaySeq,
                   SubNav = (IEnumerator<NavViewModel>)CreateNavVM(m.MenuId, pNavCol)
               };
    }

ViewModel

public class NavViewModel
{
    public int MenuId { get; set; }
    public int ParentMenuId { get; set; }
    public string Name { get; set; }
    public string HtmlTitle { get; set; }
    public string Url { get; set; }
    public int DisplaySeq { get; set; }
    public IEnumerator<NavViewModel> SubNav { get; set; }
}

Model

public class Nav
{
    [Key]
    public int MenuId { get; set; }
    public int ParentMenuId { get; set; }
    public string Name { get; set; }
    public string HtmlTitle { get; set; }
    public string Url { get; set; }
    public int DisplaySeq { get; set; }
}

View

    @model IEnumerable<yetpweb.ViewModels.NavViewModel>

    @foreach (var m in Model) {
        <div class="ui simple dropdown item">
            @m.Name
            <div class="menu">
                <a class="item" href="#">Link Item</a>
                <a class="item" href="#">Link Item</a>
                <div class="item">
                    <i class="dropdown icon"></i>
                    Sub Menu
                    <div class="menu">
                        <a class="item" href="#">Link Item</a>
                        <a class="item" href="#">Link Item</a>
                    </div>
                </div>
                <a class="item" href="#">Link Item</a>
            </div>
        </div>
    }

1 Answer 1

1

You can just start another razor foreach statement. In your code this would result in:

@foreach (var m in Model) {
        <div class="ui simple dropdown item">
            @m.Name
            <div class="menu">
                <a class="item" href="#">Link Item</a>
                <a class="item" href="#">Link Item</a>
                <div class="item">
                    <i class="dropdown icon"></i>
                    @foreach(var sub in m.SubNav) {
                    <div class="menu">
                        <a class="item" href="#">Link Item</a>
                        <a class="item" href="#">Link Item</a>
                    </div>
                    }
                </div>
                <a class="item" href="#">Link Item</a>
            </div>
        </div>
    }
Sign up to request clarification or add additional context in comments.

1 Comment

Please flag this as the answer in case it answered your question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.