private void WriteItem(TreeViewItem item, IHtmlNode parentTag, ITreeViewHtmlBuilder builder) { if (ItemAction != null) { ItemAction(item); } if (item.Visible) { if (item.IsAccessible(Authorization, ViewContext)) { var hasAccessibleChildren = item.Items.Any(x => x.Visible) && item.Items.IsAccessible(Authorization, ViewContext); IHtmlNode itemTag = builder.ItemTag(item, hasAccessibleChildren).AppendTo(parentTag); builder.ItemInnerContent(item).AppendTo(itemTag.Children[0]); if (item.LoadOnDemand || ShowCheckBox || item.Value.HasValue()) { builder.ItemHiddenInputValue(item).AppendTo(itemTag.Children[0]); } if (item.Template.HasValue()) { builder.ItemContentTag(item).AppendTo(itemTag); } else if (hasAccessibleChildren) { IHtmlNode ul = builder.ChildrenTag(item).AppendTo(itemTag); item.Items.Each(child => WriteItem(child, ul, builder)); } } } }