MultiselectList

Das MultiselectList-EditorTemplate rendert ein Auswahlfeld mit Mehrfachauswahl. Der Wert ist ein string[]; die Auswahlliste kommt über [AdditionalMetadata("Selection", ...)]; Einbindung über [UIHint("MultiselectList")]. Ob ein leerer Eintrag in der Liste steht, steuert [EmptyEntry(false)].

MultiselectList ohne leeren Eintrag

[EmptyEntry(false)] unterdrückt den leeren Eintrag – die Liste enthält nur die echten Optionen.

@model MultiselectListOhneLeereintragBeispielViewModel

<form class="fmh-demo-form">
    @Html.EditorFor(m => m.Laenderauswahl)
</form>
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using FMH.Komponente.Basis.Ui.Validation.DataAnnotation;
using Microsoft.AspNetCore.Mvc.Rendering;

namespace FMH.Komponente.WebUI.Areas.Basis.Models
{
    public class MultiselectListOhneLeereintragBeispielViewModel
    {
        public IEnumerable<SelectListItem> Laender { get; } = new List<SelectListItem>
                                                              {
                                                                  new ("Schweiz", "CH"),
                                                                  new ("Deutschland", "DE"),
                                                                  new ("Österreich", "AT"),
                                                              };

        // Ohne Vorbelegung: mit [EmptyEntry(false)] enthält die Liste keinen leeren Eintrag.
        [Display(Name = "Länder (Mehrfachauswahl)")]
        [UIHint("MultiselectList")]
        [AdditionalMetadata("Selection", nameof(Laender))]
        [EmptyEntry(false)]
        public string[] Laenderauswahl { get; set; }
    }
}

Darstellung

Ohne weitere Angabe rendert das Template als erste Option einen leeren Eintrag (<option value="" class="fmh-empty-item"></option>). [EmptyEntry(false)] unterdrückt ihn; die Liste enthält dann nur die echten Optionen.

[Display(Name = "Länder")]
[UIHint("MultiselectList")]
[AdditionalMetadata("Selection", nameof(Laender))]
[EmptyEntry(false)]
public string[] Laenderauswahl { get; set; }

EmptyEntry liegt in FMH.Komponente.Basis.Ui.Validation.DataAnnotation und wird über ModelMetadata.HasEmptyEntry() reflektiv am Property gelesen – also ohne AdditionalMetadataProvider.

Angabe Wirkung
kein Attribut leerer Eintrag wird gerendert (Standard)
[EmptyEntry] / [EmptyEntry(true)] leerer Eintrag wird gerendert
[EmptyEntry(false)] kein leerer Eintrag

Bei der Mehrfachauswahl ist der leere Eintrag nur ein zusätzlicher, leerer Listeneintrag – „nichts ausgewählt" ist hier ohnehin über eine leere Auswahl möglich. Das Unterdrücken ist deshalb vor allem Kosmetik in der aufgeklappten Liste.

Dasselbe Attribut wirkt gleich bei DropdownList und ComboboxList.

MultiselectList (Standard, mit leerem Eintrag)

Auswahlfeld mit Mehrfachauswahl (string[]); ohne Angabe enthält die Liste einen leeren Eintrag.

@model MultiselectListBeispielViewModel

<form class="fmh-demo-form">
    @Html.EditorFor(m => m.Laenderauswahl)
</form>
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using FMH.Komponente.Basis.Ui.Validation.DataAnnotation;
using Microsoft.AspNetCore.Mvc.Rendering;

namespace FMH.Komponente.WebUI.Areas.Basis.Models
{
    public class MultiselectListBeispielViewModel
    {
        public IEnumerable<SelectListItem> Laender { get; } = new List<SelectListItem>
                                                              {
                                                                  new ("Schweiz", "CH"),
                                                                  new ("Deutschland", "DE"),
                                                                  new ("Österreich", "AT"),
                                                              };

        [Display(Name = "Länder (Mehrfachauswahl)")]
        [UIHint("MultiselectList")]
        [AdditionalMetadata("Selection", nameof(Laender))]
        [EmptyEntry(true)]
        public string[] Laenderauswahl { get; set; } = { "CH", "AT" };
    }
}

Darstellung

Das MultiselectList-EditorTemplate rendert ein Auswahlfeld mit Mehrfachauswahl. Der Wert ist ein string[] der ausgewählten Werte; die Auswahlliste kommt über [AdditionalMetadata("Selection", nameof(...))].

[Display(Name = "Länder")]
[UIHint("MultiselectList")]
[AdditionalMetadata("Selection", nameof(Laender))]
public string[] Laenderauswahl { get; set; }

public IEnumerable<SelectListItem> Laender { get; } = new List<SelectListItem> { /* ... */ };

Voraussetzung: registrierter AdditionalMetadataProvider.

Weitere Konfigurationen

Konfiguration Wirkung
[EmptyEntry(false)] Unterdrückt den leeren Eintrag (Standard: leerer Eintrag wird gerendert), siehe unten
[AdditionalMetadata("FavSelection", nameof(...))] Favoriten-Liste
[Required] / [RequiredIf] mindestens eine Auswahl erforderlich