public async Task <IViewComponentResult> InvokeAsync(Widget widget) { if (widget == null || !Request.Path.HasValue) { return(await Task.FromResult <IViewComponentResult>(Content(string.Empty))); } // slugs var slugs = Request.Path.Value.Split('/', StringSplitOptions.RemoveEmptyEntries); // if no slugs or first slug is reserved when it's not preview, return empty if (slugs.Length <= 0 || (slugs[0].ToLower() != "preview" && Array.IndexOf(PageService.Reserved_Slugs, slugs[0].ToLower()) != -1)) { return(await Task.FromResult <IViewComponentResult>(Content(string.Empty))); } // page Page page; if (slugs[0].ToLower() == "preview") { var composePageId = GetComposeUrlPageId(); if (composePageId == 0) { return(await Task.FromResult <IViewComponentResult>(Content(string.Empty))); } page = await pageService.GetAsync(composePageId); } else { page = await pageService.GetAsync(slugs); } // visible only parent has children if (page.IsParent && !page.HasChildren) { return(await Task.FromResult <IViewComponentResult>(Content(string.Empty))); } // nav str string navBody; int pageId; if (page.IsParent) { navBody = PageService.NavMdToHtml(page.Nav, page.Slug); pageId = page.Id; } else { var parent = await pageService.GetAsync(page.ParentId.Value); navBody = PageService.NavMdToHtml(parent.Nav, parent.Slug); pageId = parent.Id; } // edit link var editNavLink = BlogRoutes.GetPageNavEditLink(pageId); // wid var pageNavigationWidget = (PageNavigationWidget)widget; return(View("~/Components/PageNavigation.cshtml", new PageNavigationVM { NavBody = navBody, NavEditLink = editNavLink, WidgetTitle = pageNavigationWidget.Title })); }