c# - Using recursive partial view in MVC raises Stack empty InvalidOperationException -



c# - Using recursive partial view in MVC raises Stack empty InvalidOperationException -

i want create recursive menu recursive elements. first approach utilize partial views in order re-use code.. alas, when run code, throws "system.invalidoperationexception" "stack empty" error.

i mapping info web service automapper, results in next entity:

public interface inavigationitemcontract { int id { get; set; } string title { get; set; } int parentid { get; set; } string url { get; set; } bool displayinmenu { get; set; } decimal sortorder { get; set; } ienumerable<ipagebasecontract> pages { get; set; } ienumerable<inavigationitemcontract> sites { get; set; } }

the partial view initialize menu (_menu.cshtml):

@model ienumerable<inavigationitemcontract> <div class="navbar navbar-default" role="navigation"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="/">home</a></li> @foreach (var navigationitem in model) { @html.partial("_menuitem", navigationitem); } </ul> </div> </div>

the partial display menu item (_menuitem.cshtml):

@model inavigationitemcontract @if (model.pages != null && model.pages.any()) { if (model.pages.count() == 1 || !model.displayinmenu) { // 1 page, default. // other alternative pages should not displayed, we'll display link site. <li><a href="@model.url">@model.title</a></li> } else { <li> <a href="#">@model.title</a> <ul class="dropdown-menu"> @foreach (var page in model.pages) { <li><a href="@page.relativeurl">@page.title</a></li> } @foreach (var site in model.sites) { @html.partial("_menuitem", site) } </ul> </li> } }

when replacing

@html.partial("_menuitem", site)

with

<li>@site.title</li>

everything works charm (except fact not desired result).

i have tried next approaches well:

create displaytemplate use html.renderpartial instead of html.partial

the exception occurs in _menuitem.cshtml:

@html.partial("_menuitem", site)

it not occur first time partial called (in _menu.cshtml), in _menuitem.cshtml itself, when calling itself.

why getting exception? , might solution?

i have found workaround. exception still puzzles me, can go on render menu (even though not have ability set breakpoint on helper code)..

@model ienumerable

@helper recursivemenuitem(inavigationitemcontract menuitem) { if (menuitem.pages != null && menuitem.pages.any()) { if (menuitem.pages.count() == 1 || !menuitem.displayinmenu) { // 1 page, default. // other alternative pages should not displayed, we'll display link site. <li><a href="@menuitem.url">@menuitem.title</a></li> } else { <li> <a href="#">@menuitem.title</a> <ul class="dropdown-menu"> @foreach (var page in menuitem.pages) { <li><a href="@page.url">@page.title</a></li> } @foreach (var site in menuitem.sites) { @recursivemenuitem(site) } </ul> </li> } } } <div role="navigation"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="">home</a></li> @foreach (var menuitem in model) { @recursivemenuitem(menuitem) } </ul> </div> </div>

c# asp.net-mvc recursion partial asp.net-mvc-partialview

Comments

Popular posts from this blog

model view controller - MVC Rails Planning -

ruby on rails - Devise Logout Error in RoR -

html - Submenu setup with jquery and effect 'fold' -