首页 > 解决方案 > 在作为标签助手调用的视图组件中,我们如何访问内部 HTML?

问题描述

在标签助手中,我们可以访问 HTML 内部的标签。

<!-- Index.cshtml -->  
<my-first>
    This is the original Inner HTML from the *.cshtml file.
</my-first>

// MyFirstTagHelper.cs > ProcessAsync
var childContent = await output.GetChildContentAsync();
var innerHtml = childContent.GetContent();

如果我们调用视图组件作为标签助手,我们如何访问内部 HTML?

<vc:my-first>
    This is the original Inner HTML from the *.cshtml file.
</vc:my-first>

// MyFirstViewComponent.cs > InvokeAsync()
var innerHtml = DoMagic();

一些进一步的想法:

我很欣赏我们可以通过 HTML 属性将任意内容传递给视图组件。但是,在文本量很大的情况下,这可能变得不切实际,在这种情况下,内部 HTML 将更具可读性并具有更好的工具支持。

有些人可能还会说,“那为什么不直接使用标签助手呢?” 好吧,我们想将视图与标签助手相关联,而标签助手不支持视图;相反,标签助手要求我们以编程方式构建所有 HTML。

所以我们陷入了困境。一方面,我们想要一个标签助手,但它们不支持视图;另一方面,我们可以使用视图组件作为标签助手,但视图组件可能不允许我们访问内部 HTML。

标签: asp.net-coreasp.net-core-mvctag-helpersasp.net-core-mvc-2.0asp.net-core-viewcomponent

解决方案


抱歉,答案是“只需使用标签助手”

请参阅以下问题:https ://github.com/aspnet/Mvc/issues/5465

能够ViewComponent从标签助手调用 a 只是一种不同的调用方式,而不是使用@Component.Invoke().

我可以看出这是在哪里误导,我确实记得在 ASP.NET Core 2.1 教程中看到“视图组件类似于标记帮助程序,但更强大”的声明。


推荐阅读