ComboboxList

Das ComboboxList-EditorTemplate rendert ein durchsuchbares Auswahlfeld (Single-Select). Die Auswahlliste kommt wie bei der DropdownList aus einer Eigenschaft, deren Name über [AdditionalMetadata("Selection", ...)] angegeben wird; Einbindung über [UIHint("ComboboxList")]. Ob ein leerer Platzhalter-Eintrag gerendert wird, steuert [EmptyEntry(false)].

ComboboxList ohne leeren Eintrag

[EmptyEntry(false)] unterdrückt den leeren Platzhalter – die Liste beginnt beim ersten Eintrag.

@model ComboboxListOhneLeereintragBeispielViewModel

<form class="fmh-demo-form">
    @Html.EditorFor(m => m.Land)
</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 ComboboxListOhneLeereintragBeispielViewModel
    {
        public IEnumerable<SelectListItem> Laender { get; } = new List<SelectListItem>
                                                              {
                                                                  new ("Schweiz", "CH"),
                                                                  new ("Deutschland", "DE"),
                                                                  new ("Österreich", "AT"),
                                                              };

        // Ohne Vorbelegung: mit [EmptyEntry(false)] gibt es keinen leeren Eintrag,
        // die Liste startet direkt beim ersten Eintrag.
        [Display(Name = "Land (durchsuchbar)")]
        [UIHint("ComboboxList")]
        [AdditionalMetadata("Selection", nameof(Laender))]
        [EmptyEntry(false)]
        public string Land { get; set; }
    }
}

Darstellung

Ohne weitere Angabe rendert das Template als erste Option einen leeren Eintrag (<option value=""></option>) – der Platzhalter für „nichts ausgewählt". [EmptyEntry(false)] unterdrückt ihn; die Liste beginnt dann direkt beim ersten echten Eintrag.

[Display(Name = "Land (durchsuchbar)")]
[UIHint("ComboboxList")]
[AdditionalMetadata("Selection", nameof(Laender))]
[EmptyEntry(false)]
public string Land { 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

Zu beachten: Ohne leeren Eintrag gibt es keinen „nichts ausgewählt"-Zustand – ist der Wert nicht vorbelegt, zeigt die Combobox den ersten Eintrag an und dieser wird beim Absenden übermittelt. Für Pflichtfelder mit [Required] daher den leeren Eintrag stehen lassen, damit die Validierung greift.

Dasselbe Attribut wirkt gleich bei DropdownList und MultiselectList.

ComboboxList (Standard, mit leerem Eintrag)

Durchsuchbares Auswahlfeld (Single-Select); ohne Angabe wird ein leerer Platzhalter-Eintrag gerendert.

@model ComboboxListBeispielViewModel

<form class="fmh-demo-form">
    @Html.EditorFor(m => m.Land)
</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 ComboboxListBeispielViewModel
    {
        public IEnumerable<SelectListItem> Laender { get; } = new List<SelectListItem>
                                                              {
                                                                  new ("Schweiz", "CH"),
                                                                  new ("Deutschland", "DE"),
                                                                  new ("Österreich", "AT"),
                                                              };

        [Display(Name = "Land (durchsuchbar)")]
        [UIHint("ComboboxList")]
        [AdditionalMetadata("Selection", nameof(Laender))]
        [EmptyEntry(true)]
        public string Land { get; set; } = "CH";
    }
}

Darstellung

Das ComboboxList-EditorTemplate rendert ein durchsuchbares Auswahlfeld (Single-Select). Die Auswahlliste wird wie bei der DropdownList über eine IEnumerable<SelectListItem>-Eigenschaft bereitgestellt, deren Name über [AdditionalMetadata("Selection", nameof(...))] angegeben wird.

[Display(Name = "Land")]
[UIHint("ComboboxList")]
[AdditionalMetadata("Selection", nameof(Laender))]
public string Land { get; set; }

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

Voraussetzung: registrierter AdditionalMetadataProvider.

Weitere Konfigurationen

Konfiguration Wirkung
[EmptyEntry(false)] Unterdrückt den leeren Platzhalter-Eintrag, siehe unten
[AdditionalMetadata("FavSelection", nameof(...))] Favoriten-Liste
[Required] / [RequiredIf] Pflichtauswahl