Taghilfsprogramme in ASP.NET Core

Von Rick Anderson

Informationen zu Taghilfsprogrammen

Taghilfsprogramme ermöglichen serverseitigem Code das Mitwirken am Erstellen und Rendern von HTML-Elementen in Razor-Dateien. Beispielsweise kann der integrierte ImageTagHelper eine Versionsnummer an den Bildnamen anfügen. Bei jeder Änderung des Bilds generiert der Server eine neue eindeutige Version des Bilds, sodass Clients immer das aktuelle Bild (anstelle eines veralteten zwischengespeicherten Bilds) erhalten. Für häufige Aufgaben wie das Erstellen von Formularen und Links sowie das Laden von Objekten gibt es zahlreiche integrierte Taghilfsprogramme. Weitere Taghilfsprogramme sind in öffentlichen GitHub-Repositorys und als NuGet-Pakete verfügbar. Taghilfsprogramme werden in C# erstellt und sind für HTML-Elemente basierend auf dem Elementnamen, dem Attributnamen oder dem übergeordneten Tag konzipiert. Beispielsweise kann der integrierte LabelTagHelper für das HTML-<label>-Element verwendet werden, wenn die LabelTagHelper-Attribute angewendet werden. Wenn Sie mit HTML-Hilfsern vertraut sind, reduzieren Tag-Hilfer die expliziten Übergänge zwischen HTML und C# in Razor Ansichten. Häufig stellen HTML-Hilfsprogramme eine Alternative zu einem bestimmten Taghilfsprogramm dar. Allerdings ersetzen Taghilfsprogramme HTML-Hilfsprogramme nicht, und es gibt nicht für jedes HTML-Hilfsprogramm ein Taghilfsprogramm. Im Abschnitt Taghilfsprogramme und HTML-Hilfsprogramme im Vergleich werden die Unterschiede detaillierter erläutert.

Taghilfen werden in Razor Komponenten nicht unterstützt. Weitere Informationen finden Sie unter Razor-Komponenten in ASP.NET Core.

Vorteile eines Taghilfsprogramms

Eine HTML-freundliche Entwicklungsumgebung

Für den meisten Teil Razor sieht Markup mit Tag-Hilfshilfen wie Standard-HTML aus. Front-End-Designer, die mit HTML/CSS/JavaScript vertraut sind, können ohne C#Razor-Syntax bearbeitet Razor werden.

Eine umfassende IntelliSense-Umgebung zum Erstellen von HTML und Razor Markup

Dies ist im scharfen Kontrast zu HTML-Hilfsern, dem vorherigen Ansatz für die serverseitige Erstellung von Markup in Razor Ansichten. Im Abschnitt Taghilfsprogramme und HTML-Hilfsprogramme im Vergleich werden die Unterschiede detaillierter erläutert. Im Abschnitt IntelliSense-Unterstützung für Taghilfsprogramme wird die IntelliSense-Umgebung beschrieben. Selbst Entwickler, die mit der C#-Syntax vertraut sind, sind produktiver mit Tag-Hilfsgebern als das Schreiben von Razor C# Razor -Markup.

Eine Möglichkeit, Sie produktiver und fähiger zu machen, robustere, zuverlässigere und wartungsfähiger Code mithilfe von Informationen, die nur auf dem Server verfügbar sind

Beispielsweise sollte das Mantra zum Aktualisieren von Bildern den Namen des Bilds ändern, wenn Sie das Bild ändern. Bilder sollten zur Verbesserung der Leistung immer zwischengespeichert werden, denn wenn Sie nicht den Namen des Bildes ändern, kann es sein, dass Clients veraltete Kopien erhalten. In der Vergangenheit musste der Name des Bildes immer geändert werden, wenn dieses bearbeitet wurde, und jeder Verweis auf das Bild in der Web-App musste aktualisiert werden. Dies ist nicht nur sehr arbeitsintensive, es ist auch fehleranfällig (Sie könnten einen Verweis verpassen, versehentlich die falsche Zeichenfolge eingeben usw.) Das integrierte ImageTagHelper Kann für Sie automatisch ausgeführt werden. Das ImageTagHelper-Taghilfsprogramm kann eine Versionsnummer an den Bildnamen anfügen. Das bedeutet, dass der Server bei jeder Änderung eine neue eindeutige Version für das Bild generiert. Clients erhalten dann immer das aktuelle Bild. Die Verwendung des ImageTagHelper ist grundsätzlich kostenlos, bietet mehr Stabilität, und Sie sparen Zeit.

Die meisten integrierten Taghilfsprogramme sind für HTML-Standardelemente konzipiert und stellen serverseitige Attribute für die jeweiligen Elemente bereit. Das <input>-Element, das in vielen Ansichten im Ordner Views/Accounts (Ansichten/Konten) verwendet wird, enthält beispielsweise das asp-for-Attribut. Dieses Attribut extrahiert den Namen der angegebenen Modelleigenschaft, und fügt diesen in die gerenderte HTML-Seite ein. Berücksichtigen Sie eine Razor Ansicht mit dem folgenden Modell:

public class Movie
{
    public int ID { get; set; }
    public string Title { get; set; }
    public DateTime ReleaseDate { get; set; }
    public string Genre { get; set; }
    public decimal Price { get; set; }
}

Das folgende Razor Markup:

<label asp-for="Movie.Title"></label>

wird der folgende HTML-Code generiert:

<label for="Movie_Title">Title</label>

Das asp-for-Attribut wird von der For-Eigenschaft im LabelTagHelper-Taghilfsprogramm zur Verfügung gestellt. Weitere Informationen finden Sie unter Erstellen von Taghilfsprogrammen.

Verwalten des Taghilfsprogrammbereichs

Der Taghilfsprogrammbereich wird über eine Kombination aus @addTagHelper, @removeTagHelper und dem Deaktivierungszeichen „!“ gesteuert.

@addTagHelper stellt Taghilfsprogramme zur Verfügung.

Wenn Sie eine neue ASP.NET Core Web-App namens AuthoringTagHelpers erstellen, wird der folgenden Views/_ViewImports.cshtml Datei Ihrem Projekt hinzugefügt:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers

Über die @addTagHelper-Anweisung werden Taghilfsprogramme in der Ansicht zur Verfügung gestellt. In diesem Fall ist Pages/_ViewImports.cshtmldie Ansichtsdatei , die standardmäßig von allen Dateien im Ordner "Seiten " und Unterordnern geerbt wird. Die Taghilfen stehen zur Verfügung. Der obige Code verwendet die Wildcardsyntax ("*") zum Angeben, dass alle Tag-Hilfser in der angegebenen Assembly (Microsoft.AspNetCore.Mvc.TagHelpers) für jede Ansichtsdatei im Views-Verzeichnis oder Unterverzeichnis verfügbar sind. Der erste Parameter nach @addTagHelper dem Angeben der zu ladenden Tag-Hilfsprogramme (wir verwenden "*" für alle Tag-Hilfsprogramme), und der zweite Parameter "Microsoft.AspNetCore.Mvc.TagHelpers" gibt die Assembly an, die die Tag-Hilfsprogramme enthält. Bei Microsoft.AspNetCore.Mvc.TagHelpers handelt es sich um die Assembly für die integrierten ASP.NET Core-Taghilfsprogramme.

Verwenden Sie folgenden Code, wenn Sie alle Taghilfsprogramme in diesem Projekt zur Verfügung stellen wollen. Dadurch wird eine Assembly mit dem Namen AuthoringTagHelpers erstellt:

@using AuthoringTagHelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers

Wenn Ihr Projekt ein EmailTagHelper-Taghilfsprogramm mit einem Standardnamespace (AuthoringTagHelpers.TagHelpers.EmailTagHelper) verwendet, können Sie den vollqualifizierten Namen Ihres Taghilfsprogramms zur Verfügung stellen:

@using AuthoringTagHelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper AuthoringTagHelpers.TagHelpers.EmailTagHelper, AuthoringTagHelpers

Wenn Sie einer Ansicht über einen vollqualifizierten Namen ein Taghilfsprogramm hinzufügen möchten, müssen Sie zunächst diesen Namen (AuthoringTagHelpers.TagHelpers.EmailTagHelper) und dann den Assemblynamen (AuthoringTagHelpers) hinzufügen. Die meisten Entwickler bevorzugen die Verwendung der Syntax "*". Die Wildcardsyntax ermöglicht es Ihnen, das Wildcardzeichen "*" als Suffix in eine FQN einzufügen. Beispielsweise können Sie über die folgenden Anweisungen das EmailTagHelper-Hilfsprogramm integrieren:

@addTagHelper AuthoringTagHelpers.TagHelpers.E*, AuthoringTagHelpers
@addTagHelper AuthoringTagHelpers.TagHelpers.Email*, AuthoringTagHelpers

Wie bereits erwähnt, stellt das @addTagHelper Hinzufügen der Views/_ViewImports.cshtml Richtlinie zur Datei die Tag-Hilfe für alle Ansichtsdateien im View-Verzeichnis und Unterverzeichnisse zur Verfügung. Sie können die @addTagHelper-Anweisung in bestimmten Ansichtsdateien verwenden, wenn Sie festlegen möchten, dass das Taghilfsprogramm nur für diese Ansichten verfügbar ist.

Entfernen von Taghilfsprogrammen über @removeTagHelper

Das @removeTagHelper-Taghilfsprogramm enthält dieselben beiden Parameter wie @addTagHelper und entfernt ein bereits zuvor hinzugefügtes Taghilfsprogramm. Wenn z.B. der @removeTagHelper auf eine bestimmte Ansicht angewendet wird, wird das angegebene Taghilfsprogramm aus der Ansicht entfernt. Die Verwendung @removeTagHelper in einer Views/Folder/_ViewImports.cshtml Datei entfernt die angegebene Tag-Hilfshilfe aus allen Ansichten im Ordner.

Steuern des Bereichs "Taghilfe" mit der _ViewImports.cshtml Datei

Sie können einen beliebigen Ansichtsordner hinzufügen _ViewImports.cshtml , und das Ansichtsmodul wendet die Richtlinien sowohl aus dieser Datei als auch der Views/_ViewImports.cshtml Datei an. Wenn Sie eine leere Views/Home/_ViewImports.cshtml Datei für die Home Ansichten hinzugefügt haben, würde es keine Änderung geben, da die _ViewImports.cshtml Datei additiv ist. Alle @addTagHelper Richtlinien, die Sie der Datei hinzufügen (die nicht in der Views/Home/_ViewImports.cshtmlHome Standarddatei Views/_ViewImports.cshtml enthalten sind) würden diese Tag-Hilfsprogramme nur im Ordner anzeigen.

Deaktivieren individueller Elemente

Sie können Taghilfsprogramme auf Elementebene über das Deaktivierungszeichen „!“ für Taghilfsprogramme deaktivieren. Beispielsweise wird die Email-Validierung in <span> über dieses Zeichen deaktiviert:

<!span asp-validation-for="Email" class="text-danger"></!span>

Sie müssen dieses Zeichen auf das Start- und das Endtag anwenden. (Der Visual Studio-Editor fügt das Zeichen automatisch dem Endtag hinzu, wenn Sie es im Starttag verwendet haben.) Sobald Sie das Deaktivierungszeichen hinzugefügt haben, werden das Element und die Taghilfsprogrammattribute nicht mehr in unterschiedlichen Schriftarten angezeigt.

Verwenden von @tagHelperPrefix, um die Verwendung von Taghilfsprogrammen erforderlich zu machen

Mithilfe der @tagHelperPrefix-Anweisung können Sie ein Tagpräfix angeben, um Unterstützung für Taghilfsprogramme zu aktivieren und ihre Verwendung explizit erforderlich zu machen. Sie können beispielsweise das Views/_ViewImports.cshtml folgende Markup zur Datei hinzufügen:

@tagHelperPrefix th:

Im nachfolgend Codebild ist das Präfix des Taghilfsprogramms auf th: festgelegt, sodass nur die Elemente, die das Präfix th: verwenden, Taghilfsprogramme unterstützen (Elemente, für die Taghilfsprogramme aktiviert sind, werden in einer anderen Schriftart dargestellt). Die Elemente <label> und <input> enthalten das Präfix des Taghilfsprogramms. Für sie sind Taghilfsprogramme aktiviert, für das Element <span> hingegen nicht.

Razor markup with Tag Helper prefix set to

Für @addTagHelper gelten dieselben Hierarchieregeln wie für @tagHelperPrefix.

Taghilfsprogramme als selbstschließende Tags

Viele Taghilfsprogramme können nicht als selbstschließende Tags verwendet werden. Einige Taghilfsprogramme sind als selbstschließende Tags konzipiert. Wenn Sie ein Taghilfsprogramm verwenden, das nicht als selbstschließendes Tag konzipiert ist, wird die gerenderte Ausgabe unterdrückt. Wenn Sie ein als selbstschließendes Tag konzipiertes Taghilfsprogramm verwenden, werden selbstschließende Tags in der gerenderten Ausgabe verwendet. Weitere Informationen finden Sie unter Erstellen von Taghilfsprogrammen in ASP.NET Core in diesem Hinweis.

C# in Attributen/der Deklaration von Taghilfsprogrammen

Taghilfsprogramme lassen C# im Attribut des Elements oder im Tagdeklarationsbereich nicht zu. Beispielsweise ist der folgende Code ungültig:

<input asp-for="LastName"  
       @(Model?.LicenseId == null ? "disabled" : string.Empty) />

Der vorangehende Code kann wie folgt geschrieben werden:

<input asp-for="LastName" 
       disabled="@(Model?.LicenseId == null)" />

Normalerweise fügt der @ Operator eine Textdarstellung eines Ausdrucks in das gerenderte HTML-Markup ein. Wenn ein Ausdruck jedoch auf logische falseWerte ausgewertet wird, entfernt das Framework stattdessen das Attribut. Im vorherigen Beispiel wird das disabled Attribut entfernt, wenn Model oder LicenseId ist null.

Tag-Hilfs-Initializer

Attribute können zwar verwendet werden, um einzelne Instanzen von Taghilfen zu konfigurieren, können jedoch verwendet werden, ITagHelperInitializer<TTagHelper> um alle Tag-Hilfsinstanzen einer bestimmten Art zu konfigurieren. Betrachten Sie das folgende Beispiel eines Tag-Hilfs-Initializers, der das Attribut oder AppendVersion die asp-append-version Eigenschaft für alle ScriptTagHelpers in der App konfiguriert:

public class AppendVersionTagHelperInitializer : ITagHelperInitializer<ScriptTagHelper>
{
    public void Initialize(ScriptTagHelper helper, ViewContext context)
    {
        helper.AppendVersion = true;
    }
}

Um den Initializer zu verwenden, konfigurieren Sie sie, indem Sie sie als Teil des Startvorgangs der Anwendung registrieren:

builder.Services.AddSingleton
    <ITagHelperInitializer<ScriptTagHelper>, AppendVersionTagHelperInitializer>();

IntelliSense-Unterstützung für Taghilfsprogramme

Sie sollten ein HTML-<label>-Element schreiben. Wenn Sie <l im Visual Studio-Editor eingeben, zeigt IntelliSense passende Elemente an:

After typing

Sie erhalten nicht nur HTML-Hilfe, sondern auch das Symbol "@" unter "<>".

The

Das Symbol identifiziert das Element als Ziel von Tag-Hilfshilfen. Reine HTML-Elemente (z. B. das fieldset) zeigen das Symbol "<>" an.

Ein reines HTML-<label>-Tag zeigt das HTML-Tag (im Standardfarbdesign von Visual Studio) in braun, die Attribute in rot und die Attributwerte in blau an.

Example

Wenn Sie <label eingeben, listet IntelliSense die verfügbaren HTML/CSS-Attribute und die für Taghilfsprogramme konzipierten Attribute auf:

The user has typed an opening bracket and the HTML element name

Aufgrund der Anweisungsvervollständigung von IntelliSense können Sie die TAB-Taste drücken, um die Anweisung mit dem ausgewählten Wert zu vervollständigen:

The user has typed an opening bracket, the HTML element name

Wenn ein Taghilfsprogrammattribut eingegeben wird, ändern sich die Schriftarten des Tags und des Attributs. Wenn Sie das Standardfarbdesign von Visual Studio verwenden („Blau“ oder „Hell“), wird die Schrift in dunkellila angezeigt. Wenn Sie das Design „Dunkel“ verwenden, wird die Schrift in einem dunklen blaugrün angezeigt. Für die in diesem Artikel dargestellten Bilder wurde das Standarddesign verwendet.

The user selected

Sie können die Visual Studio CompleteWord-Tastenkombination (STRG+LEERTASTE ist die Standardeinstellung) innerhalb der doppelten Anführungszeichen ("") eingeben, und Sie befinden sich jetzt in C#, genau wie in einer C#-Klasse. IntelliSense zeigt alle Methoden und Eigenschaften auf dem Seitenmodell an. Die Methoden und Eigenschaften sind verfügbar, weil der Eigenschaftentyp ModelExpression ist. Im nachfolgenden Beispiel wird die Register-Ansicht bearbeitet, damit das RegisterViewModel verfügbar ist.

The user types

IntelliSense listet die Eigenschaften und Methoden auf, die für das Modell auf der Seite verfügbar sind. Mithilfe der umfassenden IntelliSense-Umgebung können Sie die CSS-Klasse auswählen:

The user types

The user types

Taghilfsprogramme und HTML-Hilfsprogramme im Vergleich

Taghilfen, die an HTML-Elemente in Razor Ansichten angefügt werden, während HTML-Hilfser als Methoden aufgerufen werden, die mit HTML in Razor Ansichten interspersiert sind. Berücksichtigen Sie das folgende Razor Markup, das eine HTML-Bezeichnung mit der CSS-Klasse "Caption" erstellt:

@Html.Label("FirstName", "First Name:", new {@class="caption"})

Das Symbol "at" (@) teilt Razor dies mit, dass es sich um den Anfang des Codes handelt. Bei den nächsten beiden Parametern („FirstName“ und „First Name:“) handelt es sich um Zeichenfolgen. Daher kann IntelliSense nicht helfen. Das letzte Argument:

new {@class="caption"}

Dabei handelt es sich um ein anonymes Objekt, das verwendet wird, um Attribute darzustellen. Da es sich bei class um ein reserviertes Schlüsselwort in C# handelt, sollten Sie das @-Symbol verwenden, um C# zu zwingen, @class= als Symbol (Eigenschaftenname) zu interpretieren. Zu einem Front-End-Designer (jemand, der mit HTML/CSS/JavaScript und anderen Clienttechnologien vertraut ist, aber nicht mit C# vertraut ist), Razorist die meisten der Zeile fremd. Die gesamte Zeile muss ohne Hilfe von IntelliSense erstellt werden.

Wenn Sie das LabelTagHelper-Taghilfsprogramm verwenden, kann dasselbe Markup wie folgt geschrieben sein:

<label class="caption" asp-for="FirstName"></label>

Wenn Sie die Taghilfsprogrammversion verwenden und <l im Visual Studio-Editor eingeben, zeigt IntelliSense passende Elemente an:

The user types

Mithilfe von IntelliSense können Sie die gesamte Zeile schreiben.

Das folgende Codebild zeigt den Formularteil der Ansicht, die aus der Views/Account/Register.cshtmlRazor ASP.NET 4.5.x MVC-Vorlage generiert wurde, die mit Visual Studio enthalten ist.

Razor markup for the form portion of the Register Razor view for ASP.NET 4.5 MVC project template

Der Visual Studio-Editor zeigt C#-Code vor grauem Hintergrund an. Z.B. wird das AntiForgeryToken-HTML-Hilfsprogramm

@Html.AntiForgeryToken()

vor grauem Hintergrund angezeigt. Ein Großteil des Markups in der Registeransicht ist in C# geschrieben. Zum Vergleich wird in der folgenden Abbildung der entsprechende Ansatz unter Verwendung von Taghilfsprogrammen dargestellt:

Razor markup with Tag Helpers for the form portion of the Register Razor view for an ASP.NET Core project template

Das Markup ist viel deutlicher und kann einfacher gelesen, bearbeitet und verwaltet werden als im Ansatz über das HTML-Hilfsprogramm. Der C#-Code ist auf die mindestens erforderlichen Informationen begrenzt, die der Server benötigt. Der Visual Studio-Editor zeigt Markup an, das von einem Taghilfsprogramm in einer anderen Schriftart angezeigt wird.

Sehen Sie sich die Email-Gruppe an:

<div class="form-group">
    <label asp-for="Email" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
</div>

Alle asp-Attribute enthalten den Wert „Email“. „Email“ ist allerdings keine Zeichenfolge. In diesem Kontext ist „Email“ die C#-Modellausdruckseigenschaft für das RegisterViewModel.

Mithilfe des Visual Studio-Editors können Sie das gesamte Markup im Taghilfsprogrammansatz des Registerformulars schreiben. Visual Studio stellt hingegen für einen Großteil des Codes im HTML-Hilfsprogrammansatz keine Hilfe zur Verfügung. Im Abschnitt IntelliSense-Unterstützung für Tag-Hilfsprogramme finden Sie mehr Details zum Arbeiten mit Taghilfsprogrammen im Visual Studio-Editor.

Taghilfsprogramm zu Webserversteuerelementen im Vergleich

  • Taghilfsprogramme besitzen das Element nicht, dem sie zugeordnet sind. Stattdessen sind sie nur Teil des Rendervorgangs des Elements und des Inhalts. ASP.NET Webserversteuerelemente werden auf einer Seite deklariert und aufgerufen.

  • ASP.NET Webserversteuerelemente verfügen über einen nicht trivialen Lebenszyklus, der das Entwickeln und Debuggen schwierig machen kann.

  • Mithilfe von Webserversteuerelementen können Sie Funktionen zu den Dokumentobjektmodellelementen des Clients über Clientsteuerelemente hinzufügen. Taghilfsprogramme verfügen nicht über Dokumentobjektmodelle.

  • Webserversteuerelemente umfassen die Browsererkennung nicht. Taghilfsprogramme haben keine Kenntnisse über den Browser.

  • Mehrere Tag-Hilfshilfen können auf demselben Element handeln (siehe Vermeiden von Tag-Hilfskonflikten), während Sie in der Regel keine Webserversteuerelemente verfassen können.

  • Taghilfsprogramme können das Tag und den Inhalt von HTML-Elementen verändern, dem sie zugeordnet sind. Ansonsten nehmen Sie keine Änderungen an der Seite vor. Der Funktionsbereich von Webserversteuerelementen ist weniger spezifisch. Sie können Aktionen ausführen, die andere Teile Ihrer Seite beeinflussen, wodurch Nebenwirkungen entstehen, die nicht vorgesehen sind.

  • Webserversteuerelemente verwenden Typkonverter, um Zeichenfolgen in Objekte zu konvertieren. Mit Taghilfsprogrammen arbeiten Sie auf native Weise in C#, weshalb Sie keine Typkonvertierung durchführen müssen.

  • Webserversteuerelemente verwenden System.ComponentModel die Implementierung des Laufzeit- und Entwurfszeitverhaltens von Komponenten und Steuerelementen. System.ComponentModel enthält die Basisklassen und Schnittstellen zum Implementieren von Attributen und Typkonvertern, die Datenquellen binden und Komponenten lizenzieren. Im Gegensatz dazu stehen Taghilfsprogramme, die in der Regel von TagHelper abgeleitet sind. Die TagHelper-Basisklasse stellt nur zwei Methoden zur Verfügung: Process und ProcessAsync.

Anpassen der Elementschriftart des Taghilfsprogramms

Sie können die Schriftart und Die Farbisierung von ToolsOptionsEnvironmentFonts>>>und Farben anpassen:

Options dialog in Visual Studio

ASP.NET Core: Integrierte Taghilfsprogramme

Anchor-Taghilfsprogramm

Cache-Taghilfsprogramm

Taghilfsprogramm für Komponenten

Taghilfsprogramm für verteilten Cache

Environment-Taghilfsprogramm

Hilfsprogramm für Formulartags

Hilfsprogramm für Formularaktionen

Image-Taghilfsprogramm

Hilfsprogramm für Eingabetags

Hilfsprogramm für Bezeichnungstags

Hilfsprogramm für Linktags

Hilfsprogramm für Teiltags

Hilfsprogramm für Skripttags

Hilfsprogramm für Auswahltags

Hilfsprogramm für Textbereichtags

Hilfsprogramm für Überprüfungsmeldungstags

Hilfsprogramm für Überprüfungszusammenfassungstags

Zusätzliche Ressourcen