我使用MVC 6 Tag Helper创建了自己的锚标记。 如果我从属性中提供innerHtml,但我想直接从HTML提供innerHtml,它工作正常。 这是我自定义锚点的TagHelper代码
public string Text { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var builder = new TagBuilder("a");
output.Attributes.Add("data-controller", Controller);
output.Attributes.Add("data-action", Action);
if (!string.IsNullOrEmpty(Text))
{
builder.InnerHtml.Append(Text); // INNER HTML IS HERE!!!
}
builder.AddCssClass("btn btn-link");
output.Content.SetContent(builder);
base.Process(context, output);
}
现在的用法就是这样(现状 - 它有效)
<anchor-box name="ALink" controller="A" action="D" text="© 2016 Murat"></anchor-box>
是否可以手动提供内部html文本,如下所示? (需要的情况 - 目前无效)
<anchor-box name="ALink" controller="A" action="D">© 2016 Murat</anchor-box>
答案 0 :(得分:3)
为了实现这一点,我们必须使用Asyn版本的Process方法
public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
var content = output.GetChildContentAsync().Result.GetContent();
var builder = new TagBuilder("a");
builder.Attributes.Add("role", "button");
builder.Attributes.Add("id", Name);
builder.Attributes.Add("name", Name);
output.Attributes.Add("data-controller", Controller);
output.Attributes.Add("data-action", Action);
builder.InnerHtml.Append(content);
output.Content.SetContent(builder);
return base.ProcessAsync(context, output);
}
使用ProcessAsync方法,现在我可以直接在开闭标签之间给出内部html
<anchor-box name="ALink" controller="A" action="D">© 2016 Murat</anchor-box>