自定义标签助手
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
中注册)。由于专用属性,额外性 ViewContext
和 ViewComponentContext
可以注入到属性中。
public class UserViewTagHelper : TagHelper
{
[ViewContext]
public ViewContext ViewContext { get; set; }
[ViewComponentContext]
public ViewComponentContext ViewComponentContext { get; set;
}
基于这些你应该能够获得你的用户。
我创建了一个自定义标签助手,它在页面上设置了一个新标签,即 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
中注册)。由于专用属性,额外性 ViewContext
和 ViewComponentContext
可以注入到属性中。
public class UserViewTagHelper : TagHelper
{
[ViewContext]
public ViewContext ViewContext { get; set; }
[ViewComponentContext]
public ViewComponentContext ViewComponentContext { get; set;
}
基于这些你应该能够获得你的用户。