protected override async Task ProcessCoreAsync(TagHelperContext context, TagHelperOutput output) { if (TargetZone.IsEmpty()) { output.SuppressOutput(); return; } if (output.Attributes.ContainsName("data-origin")) { var origin = output.Attributes["data-origin"]; var x = origin; } if (Key.HasValue() && _widgetProvider.ContainsWidget(TargetZone, Key)) { output.SuppressOutput(); return; } TagHelperContent childContent = await output.GetChildContentAsync(); TagHelperContent content; if (output.TagName == "widget") { if (childContent.IsEmptyOrWhiteSpace) { output.SuppressOutput(); return; } // Never render <widget> tag, only the content output.TagName = null; content = childContent; } else { output.Content.SetHtmlContent(childContent); content = new DefaultTagHelperContent(); output.CopyTo(content); } output.SuppressOutput(); if (!content.IsEmptyOrWhiteSpace) { var widget = new HtmlWidgetInvoker(content) { Order = Ordinal, Prepend = Prepend, Key = Key }; _widgetProvider.RegisterWidget(TargetZone, widget); } }
protected override async Task ProcessCoreAsync(TagHelperContext context, TagHelperOutput output) { if (TargetZone.IsEmpty()) { output.SuppressOutput(); return; } if (Key.HasValue() && _widgetProvider.ContainsWidget(TargetZone, Key)) { output.SuppressOutput(); return; } if (ViewContext.HttpContext.Request.IsAjaxRequest()) { // Don't re-inject content during AJAX requests, the target zones are most probably rendered already. // Just output the content in-place. if (output.TagName == "widget") { output.TagName = null; } else if (output.TagName == "meta") { output.SuppressOutput(); } return; } TagHelperContent childContent = await output.GetChildContentAsync(); TagHelperContent content; if (output.TagName == "widget") { if (childContent.IsEmptyOrWhiteSpace) { output.SuppressOutput(); return; } // Never render <widget> tag, only the content output.TagName = null; content = childContent; } else { output.Content.SetHtmlContent(childContent); content = new DefaultTagHelperContent(); output.CopyTo(content); } output.SuppressOutput(); if (!content.IsEmptyOrWhiteSpace) { var widget = new HtmlWidgetInvoker(content) { Order = Ordinal, Prepend = Prepend, Key = Key }; _widgetProvider.RegisterWidget(TargetZone, widget); } }