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.partialthe 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
Post a Comment