自定义标签助手

Custom TagHelper

我创建了一个自定义标签助手,它在页面上设置了一个新标签,即 user-view

我是这样使用这个Tag Helper的

<user-view user-view-mode="Sidebar"></user-view>

并希望此标签助手创建一个 html 结构,如下所示

<div class="user-view">
   [...]
</div>

但是在查看生成的代码时我发现了

<user-view>
    <div class="user-view">
        [...]
    </div>
</user-view>

我应该使用 output.SetContent() 而不是 output.Content.AppendHtml() 吗?

此外,user-view-mode 参数的类型为 enum。有没有什么办法可以让 suggestions/hints 关于可用值 html?

最后一个问题:如何在我的 TagHelper 代码中访问当前连接的用户?

据我所知,SetContent() 方法也处理元素的内部。创建引入新标签的 TagHelpers 的方法是在处理过程中替换标签。在你的情况下,这将是这样的:

[HtmlTargetElement("user-view")]
public class UserViewTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        // Replace user-view with div
        output.TagName = "div";

        // Set class
        output.Attributes.SetAttribute("class", "user-view");

        // Append the inner structure
        output.Content.AppendHtml(...);
    }
}

关于访问当前连接用户的问题,建议使用DI。您可以通过标准构造函数注入来注入任何服务(之前已在 IServiceCollection 中注册)。由于专用属性,额外性 ViewContextViewComponentContext 可以注入到属性中。

public class UserViewTagHelper : TagHelper
{

    [ViewContext]
    public ViewContext ViewContext { get; set; }

    [ViewComponentContext]
    public ViewComponentContext ViewComponentContext { get; set;
}

基于这些你应该能够获得你的用户。