Sie sind hier:
Wissen
Telefon (Mo-Fr 9 bis 16 Uhr):
+49 (0)201 649590-50
|
Kontaktformular
Buy me a coffee
MENU
Medien
Übersicht
Lexikon/Glossar
Spickzettel
Weblog
Konferenzvorträge
Fachbücher
Fachartikel
Leserportal
Autoren gesucht!
Literaturtipps
Praxisnahe Fallbeispiele
Downloads
Newsletter
.NET
Startseite
.NET 8.0
.NET 7.0
.NET 6.0
.NET 5.0
.NET Core
.NET 4.0/4.5.x/4.6.x
.NET 3.0/3.5
.NET 2.0
.NET-Lexikon
Entwicklerwerkzeuge
Klassenreferenz
Softwarekomponenten
Windows Runtime
World Wide Wings-Demo
Versionsgeschichte
Codebeispiele
ASP.NET
Artikel
Bücher
Schulung & Beratung
Konferenzen/Events
ASP.NET
Startseite
Lexikon
Sicherheit
Konfiguration
Global.asax
Tracing
Technische Beiträge
Klassenreferenz
Entwicklerwerkzeuge
Softwarekomponenten
Forum
Schulung & Beratung
PowerShell
Startseite
Commandlet-Referenz
Codebeispiele
Commandlet Extensions
Versionsgeschichte
Schulungen+Beratung
Windows
Startseite
Windows Runtime (WinRT)
Windows PowerShell
Windows Scripting
Windows-Schulungen
Windows-Lexikon
Windows-Forum
Scripting
Startseite
Lexikon
FAQ
Bücher
Architektur
Skriptsprachen
Scripting-Hosts
Scripting-Komponenten
COM/DCOM/COM+
ADSI
WMI
WMI-Klassenreferenz
Scripting-Tools
WSH-Editoren
Codebeispiele
.NET-Scripting
Forum
Schulung & Beratung
Nutzer
Anmeldung/Login
Buchleser-Registrierung
Gast-Registrierung
Hilfe
Website-FAQ
Technischer Support
Site Map
Tag Cloud
Suche
Kontakt
Erklärung des Begriffs: Tag Helper
Zur Stichwortliste unseres Lexikons
Was ist
Tag Helper
?
Tag Helper sind Tags oder
Attribut
e für Tags in
Razor
Template
s, 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
Model-View-Controller –
MVC
) oder in Pages (bei
ASP.NET Core
Razor
Pages) einsetzen.
Dies ist vergleichbar mit den
Direktive
n in
Angular
; allerdings übersetzt
Angular
die
Direktive
n clientseitig (also erst im Browser) in Standard-HTML-Tags. Tag Helper nehmen eine ähnliche Rolle ein wie früher die
Webserver
steuerelemente in ASP.NET
Webforms
, sind aber in ihrer Implementierung wesentlich einfacher. Eine Entwurfszeitansicht gibt es hier nicht. Tag Helpers können sich auch auf Standard-HTML-Tags beziehen und diese modifizieren.
Vordefinierte Tag Helper
Microsoft liefert bereites eine Reihe eigener Tags, z.B.
<partial>
<cache> und
<environment>
sowie Tag-
Attribut
e (die mit der Vorsilbe "asp-" beginnen), z.B.
asp-controller und asp-action for <form>
asp-for für <label>, <input> und <select>
asp-append-version für <img>
asp-validation-for für <span>
in
ASP.NET Core
in der Microsoft.AspNetCore.Mvc.TagHelpers.dll mit.
Damit diese Tag Helper überhaupt nutzbar sind, müssen Sie mit @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers eingebunden werden. Dies erledigt Microsoft freundlicherweise in den Projektvorlage "Web Application" und "Web Application (
MVC
)" schon in der Datei /Shared/_ViewImports.cshtml, die automatisch für jeden View geladen wird.
Listing 1 zeigt Tags mit "asp-" beginnenden Erweiterungsattributen (asp-for, asp-append-version, usw). Microsoft nennt diese Erweiterungsattribute sowie eigenständigen neue Tags wie <environment> und <cache> in Listing 1 "Tag Helper". Sie sind eine elegante Alternative zu den bisherigen
HTML Helper
-Funktionen (z.B. @Html.
TextBox
For()), die es aber auch weiterhin gibt. Im Einzelnen bieten die in Listing 1 verwendeten Tag Helper folgende Funktionen:
asp-for:
Datenbindung
an ein
Property
aus dem Modell
asp-append-version: Anhängen eines
Hash
-Wertes für die Datei, der sich jedes Mal ändert, wenn sich die Datei ändert. So wird verhindert, dass der Benutzer wegen
Caching
im Browser nicht die aktuelle Datei sieht (Cache Busting).
<cache>: Zwischenspeicherung des Inhalts für die bei expires-after angegebene Zeitdauer.
<environment>: Ausgabe nur, wenn einer der Names genannten Umgebungen aktiv ist. Den Namen für die aktive Umgebung legt man in der Umgebungsvariablen ASPNETCORE
ENVIRONMENT fest. Mit diesem Tag Helper definiert Microsoft in der Standardlayoutvorlage in der Datei /Shared/
Layout.html, dass in den Umgebungen "Staging" und "Produktion", die Bootstrap-
CSS
-Datei im Standard aus dem
Content Delivery Network
(
CDN
) von Microsoft kommt.
Es gibt weitere eingebaute Tag Helper in der
Komponente
Microsoft.AspNetCore.Mvc.TagHelpers.dll. Damit die Tag Helper überhaupt nutzbar sind, müssen Sie mit @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers eingebunden werden. Dies erledigt Microsoft freundlicherweise in der Projektvorlage schon in der Datei /Shared/_ViewImports.cshtml, die automatisch für jeden View geladen wird.
Listing 1: Eingebaute Tag Helper
@model ITVisions.Autor
<html>
<h3>Autor #@Model.ID: @Model.Name</h3>
<img width="50" src="~/images/Foto_@(Model.Name.Replace(" ","")+".jpg")" asp-append-version="true" />
<input asp-for="Name" class="form-control" />
...
<div>
<cache expires-after="@TimeSpan.FromMinutes(10)">
Zuletzt aktualisiert @DateTime.Now.ToString().
</cache>
Dies ist die
<environment names="development">
Entwicklungsumgebung
!</environment>
<environment names="test1,test2">Testumgebung!</environment>
<environment names="produktion">Produktionsumgebung!</environment>
</div>
</html>
Eigene Tag Helper
Natürlich kann der Softwareentwickler eigene Tag Helper schreiben. Dazu erstellt er eine öffentliche Klasse, die von Microsoft.AspNetCore.
Razor
.TagHelpers.TagHelper erbt. Der Name der Klasse sollte konventionsgemäß auf TagHelper enden. Der vordere Teil wird dann zum Tagnamen, wobei Kebab
Casing
(alias Spinal
Casing
) Anwendung findet, d.h.
Aus der Klasse AutorTagHelper entsteht das Tag <autor>
Aus der Klasse DateTimeTagHelper entsteht das Tag <date-time/>
Wenn man einen anderen Tagnamen wünscht oder nicht ein eigenständiges Tag, sondern nur ein neues
Attribut
für ein bestehendes Tag definieren will, muss man die
Annotation
[HtmlTargetElement] verwenden.
Eine Tag Helper-Klasse kann öffentliche Properties anbieten, die zu Tag-
Attribut
en werden. Die Klasse überschreibt entweder die
Methode
n Process() oder ProcessAsync(). Diese
Methode
n erhalten im
Methode
nparameter über ein TagHelperContext-
Objekt
den aktuellen Elementnamen und Taginhalt; sie geben über das ebenfalls per Parameter übergebene
Objekt
TagHelperOutput den aktualisierten Inhalt zurück.
Die
Methode
nsignatur ist also entweder:
public override void Process(TagHelperContext context, TagHelperOutput output)
{
}
oder:
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
}
Die asynchrone Variante ist aus Gründen der besseren skalierbarkeit zu beveorzugen.
Einbindung der eigenen Tag Helper
Voraussetzung für das Funktionieren aller hier dargestellten Tag Helper ist, dass die Tag Helper mit @addTagHelper einbindet. Wenn die Tag Helper in dem Namensraum ITVisions und in der
DLL
-
Assembly
ITVTagHelper liegen, muss die Einbindung so erfolgen:
Einzelner Tag Helper
@addTagHelper "ITVisions.AutorTagHelper, ITVTagHelper" eingebunden
Alle Tag Helper in einem Namensraum
@addTagHelper "ITVisions*, ITVTagHelper"
Alle Tag Helper in einer
Assembly
@addTagHelper "*, ITVTagHelper"
Beispiel
Listing 2 zeigt das Beispiel des Tag Helpers <Autor>, das ein Autor-
Objekt
und eine Zahl (Size) als
Attribut
e besitzt und daraus eine Ausgabe in einem HTML-Header-Tag (<h1>, <h2>, <h3> usw.) erzeugt.
Somit kann man 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 Klassennamen und der zweite Parameter der
Assembly
name ist. Anstelle des Klassennamens kann man auch mit * alle Tag Helper einer
Assembly
einbinden.
Listing 2: Implementierung eines Tag Helpers für das eigene Tag <Autor>
using System;
using WindowsDeveloper;
using Microsoft.AspNetCore.
Razor
.TagHelpers;
namespace ITVisions
{
/// <summary>
/// Tag Helper <Autor autor="objekt" size="zahl 1 bis 5"></Autor>
/// </summary>
public class AutorTagHelper : 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;
}
}
}
Querverweise zu anderen Begriffen im Lexikon
Content Delivery Network (CDN)
Entwicklungsumgebung
Datenbindung
ASP.NET Core
HTML Helper
Annotation
Komponente
Direktive
Webserver
Property
Assembly
Template
Attribut
Webforms
Methode
Angular (NG)
TextBox
Caching
Objekt
Casing
Razor
Hash
Cascading Style Sheet (CSS)
Mode-View-Controler Framework (MVC)
Dynamic Link Library (DLL)
Content Delivery Network (CDN)
Beratung & Support
Anfrage für Beratung/Consulting zu Tag Helper
Gesamter Beratungsthemenkatalog
Technischer Support zum Tag Helper
Schulungen zu diesem Thema
Umstieg auf ASP.NET Core 8.0/9.0-Webanwendungen in .NET 6.0/7.0/8.0 (Umstellung/Migration von klassischen ASP.NET-Webanwendungen auf ASP.NET Core)
Umstieg von .NET-Desktop-Entwicklung (WPF/Windows Forms) auf Webentwicklung (ASP.NET/ASP.NET Core + JavaScript/TypeScript mit Webframeworks wie Angular, Vue.js oder React)
ASP.NET Core 8.0/9.0: komplettes Wissen - mit MVC, Razor Pages, Blazor, WebAPIs und gRPC
ASP.NET Model View Controller (ASP.NET MVC) und ASP.NET WebAPI für ASP.NET MVC 5.x oder ASP.NET MVC Core 6.0/7.0/8.0
Anfrage für eine individuelle Schulung zum Thema Tag Helper
Gesamter Schulungsthemenkatalog
Bücher zu diesem Thema
Blazor 9.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 9.0, C# 13.0 und Visual Studio 2022
C# 13.0 Crashkurs
Cross-Plattform-Apps mit .NET MAUI entwickeln
Moderne Datenzugriffslösungen mit Entity Framework Core 9.0
.NET 9.0 Update: Die Neuerungen in .NET 9.0 gegenüber .NET 8.0
PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
.NET 8.0 Update: Die Neuerungen in .NET 8.0 gegenüber .NET 7.0
.NET 8.0 Update: Die Neuerungen in .NET 8.0 gegenüber .NET 7.0
Concurrency with Modern C++: What every professional C++ programmer should know about concurrency
C++20: Get the Details
Blazor 8.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 8.0, C# 12.0 und Visual Studio 2022
Moderne Datenzugriffslösungen mit Entity Framework Core 8.0
C# 12.0 Crashkurs
App-Entwicklung für Mobile und Desktop: Software Engineering mit .NET MAUI und Comet für iOS, Android, Windows und macOS
Cross-Plattform-Apps mit .NET MAUI entwickeln
Blazor 7.0: Blazor WebAssembly, Blazor Server und Blazor Hybrid
C# 11.0 Crashkurs
Moderne Datenzugriffslösungen mit Entity Framework Core 7.0
PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
C++ Core Guidelines Explained: Best Practices for Modern C++
App Engineering: SwiftUI, Jetpack Compose, .NET MAUI und Flutter
Vue.js 3 Crashkurs
Moderne Datenzugriffslösungen mit Entity Framework Core 6.0
Blazor 6.0: Blazor WebAssembly, Blazor Server und Blazor Desktop
C# 10.0 Crashkurs
Cross-Plattform-Apps mit Xamarin.Forms entwickeln
Developing Web Components with TypeScript: Native Web Development Using Thin Libraries
PowerShell – kurz & gut
C# 9.0 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET 5.0, .NET Core und Xamarin
ASP.NET Core Blazor 5.0: Blazor WebAssembly und Blazor Server - Moderne Single-Page-Web-Applications
Windows PowerShell 5 und PowerShell 7: Das Praxisbuch
Moderne Datenzugriffslösungen mit Entity Framework Core 5.0
ASP.NET Core Blazor 3.1/3.2: Blazor Server und Blazor Webassembly - Moderne Single-Page-Web-Applications mit .NET, C# und Visual Studio
ASP.NET Core Blazor 3.0/3.1: Blazor Server und Blazor Webassembly - Moderne Single-Page-Web-Applications mit .NET, C# und Visual Studio
Moderne Datenzugriffslösungen mit Entity Framework Core 3.1
C# 8.0 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
Moderne Datenzugriffslösungen mit Entity Framework Core 3.0
Windows PowerShell 5.1 und PowerShell Core 6.1 - Das Praxishandbuch
Moderne Datenzugriffslösungen mit Entity Framework Core 2.1/2.2
Moderne Webanwendungen für .NET-Entwickler: Server-Anwendungen, Web APIs, SPAs & HTML-Cross-Platform-Anwendungen mit ASP.NET, ASP.NET Core, JavaScript
C# 7.3 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
Modern Data Access with Entity Framework Core: Database Programming Using .NET, .NET Core, UWP, and Xamarin with C#
Modernes C++: Concurrency meistern
Windows PowerShell und PowerShell Core - Der schnelle Einstieg: Skriptbasierte Systemadministration für Windows, Linux und macOS
Programmierung in Python
C# 7.2 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
Moderne Datenzugriffslösungen mit Entity Framework Core 2.0/2.1
Effizienter Datenzugriff mit Entity Framework Core: Datenbankprogrammierung mit C# für .NET Framework, .NET Core und Xamarin
Moderne Datenzugriffslösungen mit Entity Framework Core 2.0
Windows PowerShell 5 und PowerShell Core 6 - Das Praxishandbuch
Angular - Das Praxisbuch zu Grundlagen und Best Practices
Moderne Datenzugriffslösungen mit Entity Framework Core 1.0, 1,1 und 2.0
Moderne Datenzugriffslösungen mit Entity Framework Core 1.0, 1,1 und 2.0
Moderne Datenzugriffslösungen mit Entity Framework Core 1.1 und 2.0-Preview2
Moderne Datenzugriffslösungen mit Entity Framework Core 1.x und 2.0
Moderne Datenzugriffslösungen mit Entity Framework Core 1.x und 2.0
Moderne Datenzugriffslösungen mit Entity Framework Core 1.1
Introducing Regular Expressions: JavaScript and TypeScript
Introducing Web Development
Introducing Bootstrap 4
Programming Web Applications with Node, Express and Pug
Einführung in TypeScript: Grundlagen der Sprache TypeScript 2
Pug – Die Template-Engine für node.js
Web-Programmierung mit Node, Express und Pug
Windows PowerShell 5 – kurz & gut
Moderne Datenzugriffslösungen mit Entity Framework Core 1.1
Windows PowerShell 5.0 - Das Praxishandbuch
PHP 7 und MySQL: Von den Grundlagen bis zur professionellen Programmierung
Windows Scripting Lernen
.NET Praxis - Tipps und Tricks für .NET und Visual Studio
Grundlagen für Web-Entwickler: Protokolle, HTML und CSS
Bootstrap 3 - Stile und Komponenten
Bootstrap 4 - Stile und Komponenten
Einführung in JavaScript: ECMAScript 5
Einführung in node.js
express – Middleware für node.js
JADE – Die Template Engine für node.js
Reguläre Ausdrücke in JavaScript
Moderne Datenzugriffslösungen mit Entity Framework 6
C++ Standardbibliothek
AngularJS: Moderne Webanwendungen und Single Page Applications mit JavaScript
Microsoft SharePoint Server 2013 und SharePoint Foundation: Das umfassende Handbuch
SQL Server 2014 für Professionals: Hochverfügbarkeit, Cloud-Szenarien, Backup/Restore, Monitoring & Performance
Moderne Webanwendungen mit ASP.NET MVC und JavaScript
Windows PowerShell 4.0 - Das Praxishandbuch
JavaScript: Das umfassende Handbuch, inkl. HTML5, JavaScript-Frameworks, jQuery, OOP
C++11 für Programmierer
C++ kurz und gut
Microsoft ASP.NET 4.5 - Entwicklerbuch
Moderne Webanwendungen mit ASP.NET MVC
Verteilte Systeme und Services mit .NET 4.5
Scripting mit Windows PowerShell 3.0 - Der Workshop: Skript-Programmierung mit Windows PowerShell 3.0 vom Einsteiger bis zum Profi
Windows 8 für Administratoren
Windows 8.1 - Das Handbuch (27. November 2013)
Windows Store Apps entwickeln mit C# und XAML - Crashkurs
.NET 4.5 Update
Windows Scripting Lernen
WPF 4.5 und XAML
Datenbankprogrammierung mit .NET 4.5
C++11: Der Leitfaden für Programmierer zum neuen Standard
Verteilte Systeme und Services mit .NET 4.0
Microsoft ASP.NET 4.0 mit C# 2010 - Entwicklerbuch
Agile Software Engineering with Visual Studio
Datenbankprogrammierung mit .NET 4.0. Mit Visual Studio 2010 und SQL Server 2008 R2
Microsoft SharePoint Server 2010 und SharePoint Foundation 2010
Microsoft SQL Server 2008 R2 - Das Entwicklerbuch
Microsoft Viusal C# 2010
Office 2010 Programmierung mit VSTO und .NET 4.0: Word, Excel und Outlook erweitern und anpassen
Programmieren mit dem ADO.NET Entity Framework
.NET 4.0 Crashkurs
Visual Basic 2010: Grundlagen, ADO.NET, Windows Presentation Foundation
.NET 4.0 Update
Windows PowerShell 2.0 - Das Praxishandbuch
Windows 7 im Unternehmen
Agile Muster und Methoden
Ajax
ASP.NET 4.0
ASP.NET 4.0 mit Visual C# 2010
JavaScript
PHP 5-Migration
Scripting mit Windows PowerShell 2.0 - Der Einsteiger-Workshop
SQL Server 2008 R2: Das Programmierhandbuch. Inkl. ADO.NET 3.5, LINQ to Entities und LINQ to SQL
Visual Basic 2010
Windows PowerShell 2.0 - Crashkurs
Windows Server 2008 R2
Windows Scripting
Windows Scripting Lernen
Data Mining mit Microsoft SQL Server
Windows 7 für Administratoren
Microsoft ASP.NET 3.5 mit Visual Basic 2008 - Entwicklerbuch
.NET 3.5
Essential PowerShell
.NET 3.5 Crashkurs
Webanwendungen mit ASP.NET 3.5 und AJAX Crashkurs
Alle unsere aktuellen Fachbücher
E-Book-Abo für ab 99 Euro im Jahr