3

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

1 回答 1

4

为了实现这一点,我们必须使用 Process 方法的 Asyn 版本

    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>
于 2016-03-03T20:59:31.597 回答