Ill*_*llI 3 c# asp.net-core asp.net-core-tag-helpers asp.net-core-viewcomponent
我正在编写一个自定义 TagHelper,并希望在其中呈现一个 ViewComponent。类似于 vc:xyz 标签助手所做的事情,但以更可控的方式,以便我可以在运行时确定要呈现哪个 ViewComponent。
是否可以?
为此,您需要将 IViewComponentHelper 注入您的 TagHelper,将其上下文化,然后根据您的应用程序逻辑使用它来呈现任何 ViewComponent。这是一个快速说明:
[HtmlTargetElement("widget", Attributes = WidgetNameAttributeName)]
public class WidgetTagHelper : TagHelper
{
private const string WidgetNameAttributeName = "name";
private readonly IViewComponentHelper _viewComponentHelper;
public WidgetTagHelper(IViewComponentHelper viewComponentHelper)
{
_viewComponentHelper = viewComponentHelper;
}
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
[HtmlAttributeName(WidgetNameAttributeName)]
public string Name { get; set; }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
((IViewContextAware)_viewComponentHelper).Contextualize(ViewContext);
var content = await _viewComponentHelper.InvokeAsync(typeof(WidgetViewComponent), new { name = Name });
output.Content.SetHtmlContent(content);
}
}
Run Code Online (Sandbox Code Playgroud)
另外,请记住,自闭合标签将不起作用:
<widget name="abc" />
Run Code Online (Sandbox Code Playgroud)
请改用此表格:
<widget name="abc"></widget>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |