© best_vector/Shutterstock.com
Eigene Tag Helper für ASP.NET Core schreiben

Kolumne: .NETversum


Tag Helper sind Tags oder Attribute für Tags in Razor Templates, die von ASP.NET Core auf der Serverseite vor der Auslieferung der Website durch andere Tags oder Eigenschaften ersetzt werden. Tag Helper kann ein Webentwickler in Views (bei ASP.NET Core MVC) oder in Pages (bei ASP.NET Core Razor Pages) einsetzen.

Das ist vergleichbar mit Direktiven in Angular, allerdings übersetzt Angular die Direktiven clientseitig (also erst im Browser) in Standard-HTML-Tags. Tag Helper nehmen eine ähnliche Rolle ein wie früher die Webserversteuerelemente in ASP.NET Web Forms, sind aber in ihrer Implementierung wesentlich einfacher. Eine Entwurfszeitansicht gibt es hier nicht. Tag Helper können sich auch auf Standard-HTML-Tags beziehen und sie modifizieren.

Tag Helper für ein .NET-Objekt

Listing 1 zeigt das Beispiel des Tag Helpers <Autor>, das ein Autorobjekt und eine Zahl (Size) als Attribute besitzt und daraus eine Ausgabe in einem HTML-Header-Tag (<h1>, <h2>, <h3> usw.) erzeugt.

Listing 1: Implementierung eines Tag Helpers für den eigenen Tag <Autor>

using Microsoft.AspNetCore.Razor.TagHelpers; namespace ITVisions {  /// <summary>  /// Tag Helper  /// Verwendung: <Autor autor="objekt" size="zahl /// 1 bis 5"></Autor>  /// </summary> public class AutorTagHelper : Microsoft.AspNetCore.Razor.TagHelpers.TagHelper { /// <summary>  /// Komplexes Objekt als Parameter  /// </summary> public Autor Autor { get; set; } /// <summary>  /// Zahl als Parameter  /// </summary> public byte Size { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { if (Size > 5) Size = 5; output.TagName = "h" + Size.ToString(); output.Content.SetContent( $@"Autor #{Autor.ID}: {Autor.Name}"); output.TagMode = TagMode.StartTagAndEndTag; } } }

Man kann nun mit dem neuen Tag Helper anstelle von <h3>Autor #@Model.ID: @Model.Name</h3> die gekapselte Form verwenden: <Autor size="3" autor="Model"></Autor>, sofern man vorher das Tag mit @addTagHelper "ITVisions.AutorTagHelper, ITVTagHelper" eingebunden hat, wobei der erste Parameter der Klassenname und der zweite Parameter der Assembly-Name ist. Anstelle des Klassennamens kann man auch mit * alle Tag Helper einer Assembly einbinden.

Tag Helper für wiederholte Ausgabe

Mit Tag Helpern kann man das Repeater-Steuerelement aus ASP.NET Web Forms nachbauen. Der Trick ist, dass man ProcessAsync() verwendet, dass erlaubt, beliebige Inhalte im Tag mit GetChildContentAsync() wieder zu rendern. Auch Tag Helper können wieder im Inh...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang