Как ввести innerHtml на вход (сгенерированный с помощью TagHelper)?

Я создал свой собственный тег привязки, используя MVC 6 Tag Helper. Он отлично работает, если я даю innerHtml из свойства, но я хочу дать innerHtml непосредственно из HTML. Вот мой код 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>

person wallace740    schedule 25.02.2016    source источник
comment
получил результат от попытки это?   -  person Tharif    schedule 25.02.2016
comment
Когда вы говорите дать внутренний html-текст вручную, вы имеете в виду, что хотите сделать это чем-то вроде javascript?   -  person Ravid Goldenberg    schedule 25.02.2016
comment
Когда я пытаюсь дать внутренний текст, он почему-то не отображается на выходе. У меня такое ощущение, что TagHelper удаляет innerHtml после создания тегов.   -  person wallace740    schedule 25.02.2016


Ответы (1)


Для этого мы должны использовать асинхронную версию метода 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>
person wallace740    schedule 03.03.2016