Я могу отобразить TagHelper в C# коде, используя метод, описанный ниже.
public TagHelperOutput? RenderOutput<T>(Action<T> setTagHelperProperties, TagHelperAttributeList? attributes = null) where T : TagHelper
{
var _TagHelper = (T)__ServiceProvider.GetService(typeof(T));
if (_TagHelper == null)
{
return null;
}
setTagHelperProperties(_TagHelper);
attributes = attributes ?? new TagHelperAttributeList();
// Create a TagHelperOutput instance
TagHelperOutput output = new TagHelperOutput(
tagName: "div",
attributes: attributes,
getChildContentAsync: (useCachedResult, encoder) =>
Task.Run<TagHelperContent>(() => new DefaultTagHelperContent())
)
{
TagMode = TagMode.StartTagAndEndTag
};
// Create a TagHelperContext instance
TagHelperContext context = new TagHelperContext(
allAttributes: attributes,
items: new Dictionary<object, object>(),
uniqueId: Guid.NewGuid().ToString()
);
// Process the InnerTagHelper instance
AsyncHelper.RunSync(() => _TagHelper.ProcessAsync(context, output));
return output;
}
Однако он работает, только если TagHelper имеет только такие атрибуты, как
<my-tag my-attribute-name="..." my-attribute-id="..." />
Если для этого нужен какой-то контент, такой как ниже, я не могу понять, как это сделать с C#. Есть идеи?
<my-tag>
<my-header>...</my-header>
<my-content>...</my-content>
</my-tag>