2017-11-08 3 views
0

Ich versuche, eine Tag Helper Klasse im asp.net-Kern zu implementieren, die rohe Ausgabe des Inhalts zurückgibt.Erstellen von HtmlHelper.Raw Tag Helper

Hier ist mein Versuch:

public class RawTagHelper : TagHelper 
{ 
    public RawTagHelper(IHtmlHelper _) 
    { 
     HtmlHelper = _; 
    } 

    private IHtmlHelper HtmlHelper { get; } 

    [ViewContext] 
    public ViewContext ViewContext { get; set; } 

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) 
    { 
     ((IViewContextAware)HtmlHelper).Contextualize(ViewContext); 

     output.TagName = null; 
     output.Content.SetHtmlContent(HtmlHelper.Raw(await output.GetChildContentAsync())); 
    } 
} 

Das Problem ist, dass HtmlHelper.Raw gibt ein Objekt DefaultTagHelperContent.

Antwort

0

Eigentlich war das Problem, dass ich await output.GetChildContentAsync() zum HtmlHelper.Raw vorging, die eine Zeichenfolge akzeptiert, so i

output.Content.SetHtmlContent(HtmlHelper.Raw(await output.GetChildContentAsync())); 

zu

output.Content.SetHtmlContent(HtmlHelper.Raw((await output.GetChildContentAsync()).GetContent())); 

ändern musste dann erkannte ich, dass SetHtmlContent codieren, dass wieder als HTML-Element, so dass ich am Ende den Inhalt des Elements bekommen und SetContent anstelle von SetHtmlContent verwenden.

So sollte ein HtmlHelper.Raw Tag Helper wie die

public class RawTagHelper : TagHelper 
{ 
    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) 
    { 
     output.TagName = null; 
     output.Content.SetContent((await output.GetChildContentAsync()).GetContent()); 
    } 
} 

Nutzung aussehen ..

<raw>Some text <div>Other text</div></raw> 

Ausgang ..

Some text <div>Other text</div> 
Verwandte Themen