Referenz

Die Modelle des Pakets auf einen Blick: was drin liegt, wo sie in den Demos laufen und warum das Paket ohne eigene Beispiele auskommt.

Das Paket bringt die Modelle der LikertSkala und der FrageAntwort mit, dazu die Texte, die diese Modelle selbst brauchen, und den Template-Namen UiEditor.Kompetenzen.FrageAnwort. Builder, EditorTemplates, Skripte und Stile liegen in FMH.Komponente.Kompetenzen.

Was drin liegt

Namespace Typen
FMH.Komponente.Kompetenzen.Ui.Controls.LikertSkala LikertSkalaModel, LikertSkalaGroupModel
FMH.Komponente.Kompetenzen.Ui.Controls.LikertSkala.Daten LikertSkalaRow<T>, LikertSkalaHeader<T>, LikertSkalaHeaderColumn<T>, Editable, AssessmentLegend, DegreeOfAchievementCalculator<T>, DegreeOfAchievementResult
FMH.Komponente.Kompetenzen.Ui.Controls.FrageAnwort.Daten FrageAntwortViewModel, BeurteilungViewModel, AntwortResultat, AntwortStatus, AntwortTyp, Rolle
FMH.Komponente.Kompetenzen.Resources KompetenzenValidierungResources, Beschriftungen, Meldungen und Legende in Deutsch, Englisch, Französisch und Italienisch
UiEditor Kompetenzen.FrageAnwort, der Name des EditorTemplates für [UIHint]

Warum dieses Paket keine Beispiele hat

Ein Beispiel muss etwas zeigen, und zeigen kann dieses Paket nichts. Es hat keine EditorTemplates, keine Builder, keine Skripte und keine Stile. Jedes denkbare Beispiel würde die Modelle über FMH.Komponente.Kompetenzen rendern und wäre damit eines der Beispiele, die unter Kompetenzen schon stehen.

Anders als Basis.Validierung und FileUpload.Validierung definiert das Paket auch kein eigenes Validierungs-Attribut. Der Name folgt dem Muster der Sub-Komponenten, nicht dem Inhalt. Die Prüfregeln an FrageAntwortViewModel kommen von ausserhalb:

Eigenschaft Regel Herkunft wo sie gezeigt wird
AntwortTextFachDelegierter, AntwortTextFachFremdDelegierter Begründung Pflicht, sobald die Antwort JaMitVorbehalt oder Nein ist ([RequiredIfContains]) FMH.Komponente.Basis.Validierung Basis.Validierung › RequiredIfContains
dieselben höchstens 4000 Zeichen ([MaxLength]) .NET Basis › Textarea, Anleitung «Weitere Konfigurationen»
AntwortFachDelegierter, AntwortFachFremdDelegierter Antwortmöglichkeiten über [AdditionalMetadata] FMH.Komponente.Basis.Validierung Kompetenzen › FrageAntwort

Das Paket liefert dazu nur die Meldungstexte FrageAnwort_GrundValidation und FrageAntwort_Max400. Den Adapter für die Prüfung im Browser bringt die Basis mit.

Warum das Paket trotzdem geprüft ist

1. Die Demos laufen gegen genau diese Assembly. Die WebUI verweist auf FMH.Komponente.Kompetenzen, und das verweist auf FMH.Komponente.Kompetenzen.Validierung. Eine zweite Definition der Typen gibt es nicht mehr. Jede Kompetenzen-Demo, die rendert, belegt damit, dass die Modelle aus diesem Paket gefunden, gebunden und angezeigt werden.

Typ läuft in
LikertSkalaModel, LikertSkalaRow<T>, LikertSkalaHeaderColumn<T> LikertSkala › Grundfall und allen übrigen LikertSkala-Beispielen
LikertSkalaHeader<T> intern in LikertSkalaBuilder, also in jeder Skala
Editable, AssessmentLegend LikertSkala › Selbst- und Fremdeinschätzung
DegreeOfAchievementCalculator<T>, DegreeOfAchievementResult LikertSkala › Erfüllungsgrad, gerechnet im LikertSkalaBuilder
LikertSkalaGroupModel LikertSkala › Mehrere Skalen gruppieren
FrageAntwortViewModel, BeurteilungViewModel, AntwortTyp, UiEditor.Kompetenzen.FrageAnwort FrageAntwort › Grundfall
Rolle FrageAntwort › Rollen
AntwortResultat, AntwortStatus FrageAntwort › Ereignis FrageAntwortStatus

2. Die Logik der Modelle ist mit Unit-Tests abgedeckt. Was die Modelle selbst tun, prüft FMH.Komponente.Kompetenzen.Tests, das die Assembly über FMH.Komponente.Kompetenzen bezieht:

Testklasse prüft
FrageAntwortViewModelTests die Auswahlliste (Ja/Nein, JaMitVorbehalt und Unbeantwortet nur bei alten Werten, nie doppelt), GibAntwortTypText, HatFachFremdDelegierterBeantwortet, IstUneinig
DegreeOfAchievementCalculatorTests Erfüllungsgrad je Kompetenzgruppe und je Spalte, je nach Editable mit der passenden Einschätzung
DegreeOfAchievementResultTests Prozentwert (abgeschnitten, ohne Vorgabe leer) und TotalFulfilled
LikertSkalaRowTests GetAssessmentValue je Editable
LikertSkalaHeaderColumnTests Vorgabebreite und WidthInPixel
AssessmentLegendTests CSS-Klassen und Texte der Legende
FrageAnwortTests das EditorTemplate, gerendert über EditorFor mit [UIHint(UiEditor.Kompetenzen.FrageAnwort)]. Liefen Konstante und Dateiname auseinander, schlügen diese Tests fehl

3. Beim Umzug hat sich kein Namespace geändert. Die Typen haben FMH.Komponente.Kompetenzen.Ui.Controls.* behalten. Dass die Demos, die Templates und die Tests mit unveränderten using übersetzen, belegt das bei jedem Build.

4. Es gibt nichts einzurichten. Die Modelle sind gewöhnliche Klassen ohne Registrierung, Middleware oder Konfiguration. Was ausfallen könnte, liegt ausserhalb des Pakets und steht auf der Seite Vorbedingungen.

Aus welchem Paket die Typen kommen

Die Modelle liegen seit September 2026 in einem eigenen Paket, FMH.Komponente.Kompetenzen.Validierung. FMH.Komponente.Kompetenzen verweist darauf: Wer die Komponente referenziert, bekommt sie unverändert mit, und kein using ändert sich.

liegt in was
FMH.Komponente.Kompetenzen.Validierung die Modelle oben, KompetenzenValidierungResources, UiEditor.Kompetenzen
FMH.Komponente.Kompetenzen LikertSkalaBuilder<T>, LikertSkalaGroupBuilder, LikertSkalaColumnCollection<T>, die Fabrikmethoden, die EditorTemplates, die Bundles, KompetenzenResources mit den Texten der Templates

Die Namespaces …Ui.Controls.LikertSkala und …Ui.Controls.LikertSkala.Daten verteilen sich damit auf zwei Assemblies. Für den Aufrufer ist das unsichtbar.

Zwei Dinge fallen beim Umstieg auf:

  • Die Texte der Modelle heissen neu KompetenzenValidierungResources.<Name>, vorher KompetenzenResources.<Name>. Beide Klassen liegen im Namespace FMH.Komponente.Kompetenzen.Resources, das using bleibt also gleich. Betroffen ist nur, wer diese Texte selbst liest.
  • Quellkompatibel, aber nicht binärkompatibel. Eine Assembly, die vor der Auftrennung übersetzt wurde, sucht die Modelle weiter in FMH.Komponente.Kompetenzen. Alle FMH-Pakete gemeinsam heben und einmal vollständig neu bauen.

Nur die Modelle referenzieren

Ein ViewModel-Projekt, das die Gruppen und Zeilen der LikertSkala zusammenbaut oder eine FrageAntwortViewModel hält, kann allein das Modell-Paket ziehen:

<ItemGroup>
  <PackageReference Include="FMH.Komponente.Kompetenzen.Validierung" Version="..." />
</ItemGroup>

Es kommt mit FMH.Komponente.Basis.Validierung und dem Framework aus, ohne Razor Class Library, Basis und Infrastruktur. Was dabei fehlt: die Builder, die Fabrikmethoden und die EditorTemplates, also alles, was rendert. Die serverseitige Prüfung von FrageAntwortViewModel bleibt vollständig, die Attribute kommen aus Basis.Validierung mit.

Welche Pakete es gibt und was sie voneinander verlangen, steht im Bereich Wie funktionierts unter Pakete.