ClassicSidebar Layout

(Multi)Select ohne Input

Chip-basierte Mehrfachauswahl ohne Texteingabefeld sowie kompakter Einzelauswahl-Modus (MultiSelect="false") mit Popup-Liste und Suche.

Einzelauswahl (MultiSelect="false")

Standard-Button mit Popup, Icon-Parameter, benutzerdefinierter BtnTemplate und Readonly-Modus.

Standard
Auswahl: Stern
Icon-Parameter
Auswahl:
Custom BtnTemplate
Auswahl:
Readonly

Einzelauswahl – ListItemTemplate

ListItemTemplate erlaubt eine individuelle Darstellung jedes Eintrags in der Popup-Liste.

Mit Material-Icon
Home

Einzelauswahl – Validierung

Integration in EditContext via Form-Komponente. ShowValidationTooltip zeigt die Fehlermeldung inline.

Grundvarianten

Standard, Readonly und mit Chip-Farbe.

Standard
Option 1
Option 3
Auswahl: 1, 3
Readonly
Option 1
Option 3
Auswahl: 1, 3

ChipStyle

Beliebiges OoColorPalette-Farbschema für die Chips – inklusive Helligkeitsstufen und Varianten.

Primary
Option 2
Option 4
Secondary
Option 2
Option 4
Success.Light
Option 2
Option 4
Danger.Outline
Option 2
Option 4
Warning.Ghost
Option 2
Option 4
Aktueller Wert
2, 4

AddBtnTemplate & AddAllBtnTemplate

Der +-Button öffnet ein Dropdown zur Auswahl weiterer Items. Mit AddBtnTemplate und AddAllBtnTemplate lassen sich eigene Schaltflächen einsetzen.

Standard + AddAllBtn
Option 1
Auswahl: 1
Custom AddBtnTemplate
Auswahl:

Max – Overflow-Anzeige

Max: Begrenzt die sichtbaren Chips. Überzählige werden hinter einem +N-Button verborgen und lassen sich aufklappen.

Max="3"
Alpha
Beta
Gamma
Delta
Epsilon
Zeta
Auswahl: 1, 2, 3, 4, 5, 6

ChipItemTemplate

Eigenes Chip-Design per RenderFragment<TItem>.

Custom Template
🏷 Option 1
🏷 Option 3
Auswahl: 1, 3

Validierung

Pflichtfeld-Validierung mit ShowValidationTooltip und ValueExpression.

Pflichtfeld
SKILL.md – Multiselectohneinput
---
name: MultiselectOhneInput
description: Onesown Blazor Komponente MultiselectOhneInput (Inputs). Verwende diesen Skill wenn du die MultiselectOhneInput-Komponente verwenden, konfigurieren oder debuggen moechtest.
---

# MultiselectOhneInput

**Namespace:** `Onesown.Blazor.Components`  
**Kategorie:** Inputs  
**Basisklasse:** `FormControlBase`  
**Generisch:** Ja (`MultiselectOhneInput<TItem>` o.ae.)  

Mehrfach- oder Einzelauswahl-Komponente ohne Texteingabefeld – öffnet die Auswahlliste per Icon- oder Custom-Button. Geeignet für kompakte Szenarien (z.B. Icon-Picker, Tag-Auswahl ohne Suchfeld) und unterstützt sowohl Multi- als auch Einzelauswahl-Modus.

**Live-Demo:** https://components.schini.com/demo/multiselectohneinput  

## Parameter

| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| ``Items`` | ``List<TItem>`` | ``new()`` | Liste der auswählbaren Elemente. Elemente müssen eine "Text"- und "Value"-Property haben, oder ListItemTemplate verwenden. |
| ``ItemsChanged`` | ``EventCallback<string>`` |  | Wird ausgelöst wenn der Nutzer einen neuen Freitext-Wert hinzufügt (nur bei AllowCustomValue=true). |
| ``Readonly`` | ``bool`` |  | Setzt den Nur-Lesen-Modus: Dropdown nicht öffenbar, Chips sichtbar aber nicht entfernbar. |
| ``ClosePopupOnSelect`` | ``bool`` | ``true`` | Schließt die Dropdown-Liste nach der Auswahl eines Eintrags. Standard: true. |
| ``MultiSelect`` | ``bool`` | ``true`` | true = Mehrfachauswahl (Standard), false = Einzelauswahl (wie IconPicker). |
| ``SingleValue`` | ``TValue`` |  | Einzelauswahl-Modus: aktuell gewählter Wert. |
| ``SingleValueChanged`` | ``EventCallback<TValue>`` |  | Einzelauswahl-Modus: Callback bei Wertänderung. |
| ``SingleValueExpression`` | ``Expression<Func<object>>`` |  | Einzelauswahl-Modus: Expression für Validierung/Label. |
| ``Icon`` | ``string`` |  | Einzelauswahl-Modus: Icon-Name (Material Symbol) als Trigger-Button. |
| ``ListItemTemplate`` | ``RenderFragment<TItem>`` |  | Benutzerdefiniertes Template für die Darstellung jedes Listenelements im Dropdown. |
| ``ChipItemTemplate`` | ``RenderFragment<TItem>`` |  | Benutzerdefiniertes Template für die Darstellung jedes ausgewählten Chips. |
| ``ChipItemRemoveBtnTemplate`` | ``RenderFragment`` |  | Benutzerdefiniertes Template für den Entfernen-Button in jedem Chip. |
| ``NoRecordsTemplate`` | ``RenderFragment`` |  | Template das angezeigt wird wenn die gefilterte Liste leer ist. |
| ``AddBtnTemplate`` | ``RenderFragment`` |  | Template für einen "Hinzufügen"-Button im Dropdown-Footer. |
| ``AddAllBtnTemplate`` | ``RenderFragment`` |  | Template für einen "Alle hinzufügen"-Button im Dropdown-Footer. |
| ``BtnTemplate`` | ``RenderFragment`` |  | Einzelauswahl-Modus: eigener Trigger-Button statt Standard-Icon. |
| ``Value`` | ``List<TValue>`` | ``new()`` | Mehrfachauswahl: Liste der aktuell ausgewählten Werte. |
| ``ValueChanged`` | ``EventCallback<List<TValue>>`` |  | EventCallback für Two-Way-Binding mit @bind-Value (Mehrfachauswahl). Wird nach jeder Änderung ausgelöst. |
| ``ValueExpression`` | ``Expression<Func<object>>`` |  | LINQ-Expression für DataAnnotations-Validierung und Label (Mehrfachauswahl). |
| ``CustomValidationMethod`` | ``Func<List<TValue>, bool>`` |  | Optionale zusätzliche Validierungsfunktion für die Mehrfachauswahl. |
| ``ChipStyle`` | ``OoButtonStyle`` |  | Chip-Farbschema: null = Standard grau, z.B. OoColorPalette.Primary.Lighter |

## Geerbte Parameter (FormControlBase)

| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| ``Size`` | ``string`` | ``OoSize.Md`` | Größe der Komponente. Mögliche Werte: OoSize.Xs, OoSize.Sm, OoSize.Md, OoSize.Lg, OoSize.Xl. Wird als CSS-Klasse am Root-Element gesetzt. |
| ``Id`` | ``string`` | ``Generator.GenerateRandomHtmlTagID()`` | Eindeutige HTML-ID des Input-Elements. Wird automatisch generiert und kann überschrieben werden (z. B. für Labels mit for-Attribut). |
| ``ShowLabel`` | ``bool`` | ``true`` | Blendet das Label über dem Eingabefeld ein oder aus. Standard: true. |
| ``IsFloatingLabel`` | ``bool`` | ``true`` | Aktiviert das schwebende Label (Floating Label), das beim Fokus oder bei Eingabe nach oben animiert. Standard: true. |
| ``Label`` | ``string`` |  | Beschriftung des Eingabefelds. Wird auch als Accessible-Name für Screenreader verwendet. |
| ``Placeholder`` | ``string`` | ``" "`` | Platzhaltertext im leeren Eingabefeld. Standard: Leerzeichen (verhindert Floating-Label-Sprung in Chrome). |
| ``AutoSaveCallback`` | ``EventCallback`` |  | Wird nach jeder Wertänderung ausgelöst und signalisiert der Seite, dass gespeichert werden soll. Kombinierbar mit TriggerAutoSaveCallbackOnlyIfValid. |
| ``TriggerAutoSaveCallbackOnlyIfValid`` | ``bool`` | ``true`` | Steuert ob AutoSaveCallback nur bei gültigem Wert ausgelöst wird. Standard: true. |
| ``AfterValueChanged`` | ``EventCallback`` |  | Wird nach jeder Wertänderung ausgelöst, unabhängig von der Gültigkeit des Werts. Geeignet für Live-Vorschau oder Seiteneffekte. |
| ``ShowValidationTooltip`` | ``bool`` | ``false`` | Zeigt Validierungsmeldungen als Tooltip neben dem Feld statt als Text darunter. Standard: false. |

## Hinweise

- Immer @bind-Value für Two-Way-Binding verwenden
- Für Formular-Validierung ValueExpression="() => _model.Property" setzen
- Komponente muss innerhalb eines &lt;Form&gt;- oder &lt;EditForm&gt;-Containers liegen, damit der EditContext greift
- AutoSaveCallback wird nach jeder gültigen Änderung ausgelöst, wenn TriggerAutoSaveCallbackOnlyIfValid=true (Standard)
- AfterValueChanged wird nach jeder Änderung ausgelöst, unabhängig von der Gültigkeit
- ShowValidationTooltip=true zeigt Validierungsmeldungen als Tooltip statt unter dem Feld
- Mehrfachauswahl (Standard): MultiSelect="true", Value=List&lt;TValue&gt;, ValueChanged=List&lt;TValue&gt;
- Einzelauswahl: MultiSelect="false", SingleValue=TValue, SingleValueChanged=TValue
- Trigger-Button: Icon="edit" setzt einen Material-Symbol-Icon-Button; BtnTemplate für vollständig eigenes Markup
- Chip-Darstellung: ChipItemTemplate für eigene Chip-Darstellung der gewählten Einträge
- Alle hinzufügen: AddAllBtnTemplate zeigt einen "Alle hinzufügen"-Button im Dropdown
- Readonly: Dropdown nicht öffenbar, bestehende Chips bleiben sichtbar aber nicht entfernbar


Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.