DropdownList
Das DropdownList-EditorTemplate rendert ein Auswahlfeld. Die Auswahlliste kommt aus
einer Eigenschaft (IEnumerable<SelectListItem>), deren Name über
[AdditionalMetadata("Selection", ...)] angegeben wird; Einbindung über
[UIHint("DropdownList")]. Ob ein leerer Platzhalter-Eintrag gerendert wird, steuert
[EmptyEntry(false)].
DropdownList ohne leeren Eintrag
[EmptyEntry(false)] unterdrückt den leeren Platzhalter – die Liste beginnt beim ersten Eintrag.
@model DropdownListOhneLeereintragBeispielViewModel
<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 DropdownListOhneLeereintragBeispielViewModel
{
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")]
[UIHint("DropdownList")]
[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")]
[UIHint("DropdownList")]
[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 der Browser 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. Zusätzlich setzt das Template bei vorhandenem leerem Eintrag die CSS-Klasse fmh-select-empty am <select>.
Dasselbe Attribut wirkt gleich bei ComboboxList und MultiselectList.
DropdownList (Standard, mit leerem Eintrag)
Auswahlfeld mit Liste aus einer Modell-Eigenschaft; ohne Angabe wird ein leerer Platzhalter-Eintrag gerendert.
@model DropdownListBeispielViewModel
<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 DropdownListBeispielViewModel
{
// Der Name dieser Eigenschaft steckt in [AdditionalMetadata("Selection", ...)];
// das Template liest daraus die Auswahlliste.
public IEnumerable<SelectListItem> Laender { get; } = new List<SelectListItem>
{
new ("Schweiz", "CH"),
new ("Deutschland", "DE"),
new ("Österreich", "AT"),
};
[Display(Name = "Land")]
[UIHint("DropdownList")]
[AdditionalMetadata("Selection", nameof(Laender))]
[EmptyEntry(true)]
public string Land { get; set; } = "CH";
}
}
Darstellung
Das DropdownList-EditorTemplate rendert ein Auswahlfeld (Single-Select). Die Auswahlliste liegt als IEnumerable<SelectListItem>-Eigenschaft am ViewModel; ihr Name wird über [AdditionalMetadata("Selection", nameof(...))] angegeben.
[Display(Name = "Land")]
[UIHint("DropdownList")]
[AdditionalMetadata("Selection", nameof(Laender))]
public string Land { get; set; }
public IEnumerable<SelectListItem> Laender { get; } = new List<SelectListItem>
{
new("Schweiz", "CH"), new("Deutschland", "DE"), new("Österreich", "AT"),
};
Voraussetzung: Der AdditionalMetadataProvider ist als IDisplayMetadataProvider registriert (in Program.cs).
Weitere Konfigurationen
| Konfiguration | Wirkung |
|---|---|
[EmptyEntry(false)] |
Unterdrückt den leeren Platzhalter-Eintrag (Standard: leerer Eintrag wird gerendert), siehe unten |
[AdditionalMetadata("FavSelection", nameof(...))] |
Zusätzliche Favoriten-Liste oberhalb der regulären Optionen |
[Required] / [RequiredIf] |
Pflichtauswahl |