我创建了一个自定义标记帮助程序,在页面上设置了新标记,即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代码中访问当前连接的用户?
答案 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
注册)。由于专用属性,可以将额外性ViewContext
和ViewComponentContext
注入属性。
public class UserViewTagHelper : TagHelper
{
[ViewContext]
public ViewContext ViewContext { get; set; }
[ViewComponentContext]
public ViewComponentContext ViewComponentContext { get; set;
}
根据您应该能够吸引用户的那些。