如何输入innerHtml到输入(使用TagHelper生成)?

时间:2016-02-25 07:18:08

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

我使用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>

1 个答案:

答案 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>