Vorbedingungen

Was die Hostanwendung einmal einrichten muss, bevor das erste Beispiel läuft. Fehlt davon etwas, erscheint meist keine Fehlermeldung.

Die Grundeinrichtung für alle FMH-Komponenten, einmal in der Hostanwendung einzurichten. Die übrigen Pakete setzen sie voraus und verweisen hierher. Fehlt etwas davon, erscheint meist keine Fehlermeldung: Felder bleiben ungestaltet, Auswahllisten leer, Skripte laufen nicht.

Für jede Anwendung mit FMH-Komponenten

Was Wo Fehlt es
Paket FMH.Komponente.Basis .csproj Es bringt Basis.Validierung, Infrastruktur und Serilog.Sinks.JavaScript transitiv mit, die brauchen keinen eigenen Eintrag
builder.WebHost.UseStaticWebAssets() Program.cs findet WebOptimizer die Dateien der Pakete ausserhalb von Development nicht, die Bundles bleiben leer
builder.Services.AddBundledAssets() Program.cs gibt es keine Adressen unter /bundle/…, und jede Seite, die Module rendert, bricht ab: ModuleScriptRegistry ist dann nicht registriert
app.UseWebOptimizer() vor app.UseStaticFiles() Program.cs werden die Bundles nicht ausgeliefert, der Browser bekommt 404
options.AddFmhWidgetOptions() AddControllersWithViews in Program.cs wirken [AdditionalMetadata] und die Marker-Attribute nicht: DropdownList, RadioList, CheckboxList, ComboboxList und MultiselectList bleiben leer, Textarea ohne Zeilen und Spalten, die Display-Optionen fehlen. Dazu fehlen die Binder für Zahl und Datum, die Zahlenmeldung und der Filter, der Markup aus Eingaben bereinigt
@Html.Fmh(BasisAssetKonstanten.HeadIncludes) im <head> _Layout.cshtml fehlen Styles, jQuery und die Prüfung im Browser
@Html.Fmh(BasisAssetKonstanten.BodyIncludes) am Ende von <body> _Layout.cshtml laufen die Skripte der Bausteine nicht, und das Markup von Dialog und Alert fehlt. Eine Ausgabe von Fmh.Alert(...) im Layout muss davor stehen
builder.WebHost.UseStaticWebAssets();

builder.Services.AddControllersWithViews(options =>
{
    options.AddFmhWidgetOptions();
});

builder.Services.AddBundledAssets();

var app = builder.Build();

// Vor UseStaticFiles, sonst antwortet zuerst der Static-File-Handler mit 404.
app.UseWebOptimizer();
app.UseStaticFiles();
<head>
    @Html.Fmh(BasisAssetKonstanten.HeadIncludes)
    …
</head>
<body>
    …
    @Html.Fmh(BasisAssetKonstanten.BodyIncludes)
</body>

Wie die Bundles zustande kommen, steht im Bereich Wie funktionierts unter Bundles. Controller und Views der Pakete findet MVC von selbst, zu registrieren ist dafür nichts.

Zusätzlich für den HtmlSanitizer und Richtext

  • Erlaubte Tags und Attribute vor der ersten Verwendung setzen. Die Voreinstellung kennt weder das a-Tag noch Attribute, ein eingefügter Link wird samt Text entfernt. Die Werte gelten serverseitig und über /api/widgets/HtmlSanitizer/settings auch im Browser:

    HtmlSanitizerRichtextDefauls.AddAllowedTags("a");
    HtmlSanitizerRichtextDefauls.AddAllowedAttributes("href", "target", "rel");
    
  • Die Bereinigung abschalten geht über options.AddFmhWidgetOptions(x => x.HtmlSanitizerEnabled = false). Einzelheiten auf der Seite HtmlSanitizer dieses Pakets.

Zusätzlich für das Browser-Logging

Die Basis lädt das Browser-Logging über die HeadIncludes mit. Den Endpunkt, der die Einträge entgegennimmt, richtet die Anwendung mit FMH.Komponente.Serilog.Ingestion ein, siehe Wie funktionierts unter Logging.