Csharp/C#教程:是否可以从自定义TagHelper调用ViewComponent?分享


是否可以从自定义TagHelper调用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); } } 

另外,请记住,自动关闭标签不起作用:

  

请改用此表格:

  

跟进答案 。

调用标记帮助程序时无需编写结束标记。 只需在ProcessAsync中设置TagMode :

 output.TagMode = TagMode.StartTagAndEndTag; output.Content.SetHtmlContent(content); 

然后完全正常。

或者,您可以渲染视图组件的内容来代替widget标记,而无需呈现标记本身:

 output.SuppressOutput(); output.PostElement.SetHtmlContent(content); 

我还注意到在视图组件的视图中添加自闭合标记会使它们在最终结果中显示错误,但这可能是一个不同的主题。

上述就是C#学习教程:是否可以从自定义TagHelper调用ViewComponent?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/953596.html

(0)
上一篇 2021年11月19日
下一篇 2021年11月19日

精彩推荐