自定义TagHelper

时间:2017-03-15 11:00:40

标签: c# asp.net-core asp.net-core-tag-helpers

我创建了一个自定义标记帮助程序,在页面上设置了新标记,即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。有没有办法在html上提供有关可用值的建议/提示?

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

1 个答案:

答案 0 :(得分:2)

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

[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;
}

根据您应该能够吸引用户的那些。