RadioList
Das RadioList-EditorTemplate rendert eine Gruppe von Radio-Buttons. Die Optionen kommen
über [AdditionalMetadata("Selection", ...)]; Einbindung über
[UIHint(UiEditor.Basis.RadioList)]. Die Ausrichtung der Radio-Buttons (nebeneinander oder
nach unten) steuert [AdditionalMetadata("Direction", FlexDirection.Column)].
RadioList ohne View-Model
Das ViewModel ist nur eine lokale Variable, etwa in einer Sidebar. Die Liste kommt dann über den zweiten Parameter von EditorFor ins Template.
@* Bewusst ohne @model: Das ViewModel ist eine lokale Variable, wie in einer Sidebar oder einem
Layout-Partial. Der Behälter im Template ist damit nicht dieses Objekt, darum reicht der zweite
Parameter von EditorFor das Objekt mit; seine Eigenschaften landen in der ViewData des Templates. *@
@{
var auswahl = new RadioListBeispielViewModel();
}
<form class="fmh-demo-form">
@Html.EditorFor(m => auswahl.Anrede, auswahl)
</form>
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using FMH.Komponente.Basis.Ui.Controls;
using FMH.Komponente.Basis.Ui.Validation.DataAnnotation;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace FMH.Komponente.WebUI.Areas.Basis.Models
{
public class RadioListBeispielViewModel
{
[Display(Name = "Anrede")]
[UIHint(UiEditor.Basis.RadioList)]
[AdditionalMetadata("Selection", nameof(Anreden))]
[AdditionalMetadata("Direction", FlexDirection.Row)]
public string Anrede { get; set; } = "f";
public IEnumerable<SelectListItem> Anreden { get; } = new List<SelectListItem>
{
new ("Frau", "f"),
new ("Herr", "m"),
new ("Keine Angabe", "x"),
};
}
}
Darstellung
Ist das ViewModel nur eine lokale Variable, etwa in einer Sidebar oder einem Layout-Partial, gibt der zweite Parameter von EditorFor das Objekt mit. Das Template findet die Liste dann in der ViewData statt am Behälter:
@{
var auswahl = new RadioListBeispielViewModel();
}
@Html.EditorFor(m => auswahl.Anrede, auswahl)
Ausrichtung (Direction) und Gruppen-Label (GroupLabel) wirken unverändert, sie hängen an der Eigenschaft und nicht am Behälter.
Warum das nötig ist, in welcher Reihenfolge das Template sucht, die Variante mit anonymem Objekt und wie das Feld beim Absenden heisst (auswahl.Anrede), steht ausführlich im Beispiel «DropdownList ohne View-Model» auf der Seite DropdownList.
RadioList (Standard, nebeneinander)
Gruppe von Radio-Buttons; ohne Angabe werden die Einträge nebeneinander ausgerichtet.
@model RadioListBeispielViewModel
<form class="fmh-demo-form">
@Html.EditorFor(m => m.Anrede)
</form>
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using FMH.Komponente.Basis.Ui.Controls;
using FMH.Komponente.Basis.Ui.Validation.DataAnnotation;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace FMH.Komponente.WebUI.Areas.Basis.Models
{
public class RadioListBeispielViewModel
{
[Display(Name = "Anrede")]
[UIHint(UiEditor.Basis.RadioList)]
[AdditionalMetadata("Selection", nameof(Anreden))]
[AdditionalMetadata("Direction", FlexDirection.Row)]
public string Anrede { get; set; } = "f";
public IEnumerable<SelectListItem> Anreden { get; } = new List<SelectListItem>
{
new ("Frau", "f"),
new ("Herr", "m"),
new ("Keine Angabe", "x"),
};
}
}
Darstellung
Das RadioList-EditorTemplate rendert eine Gruppe von Radio-Buttons (Single-Select). Die Optionen kommen über [AdditionalMetadata("Selection", nameof(...))].
[Display(Name = "Anrede")]
[UIHint(UiEditor.Basis.RadioList)]
[AdditionalMetadata("Selection", nameof(Anreden))]
public string Anrede { get; set; }
public IEnumerable<SelectListItem> Anreden { get; } = new List<SelectListItem> { /* ... */ };
Voraussetzung: registrierter AdditionalMetadataProvider.
Weitere Konfigurationen
| Konfiguration | Wirkung |
|---|---|
[AdditionalMetadata("GroupLabel", false)] |
Blendet das Gruppen-Label aus (Standard: eingeblendet) |
[AdditionalMetadata("Direction", FlexDirection.Column)] |
Anordnung der Radio-Buttons (Zeile/Spalte), siehe unten |
[Required] / [RequiredIf] |
Pflichtauswahl |
EditorFor(m => lokal.Anrede, lokal) |
Liste ohne View-Model über additionalViewData, siehe «RadioList ohne View-Model» |
RadioList untereinander
Ausrichtung nach unten über [AdditionalMetadata("Direction", FlexDirection.Column)] – die Radio-Buttons stehen untereinander.
@model RadioListSpalteBeispielViewModel
<form class="fmh-demo-form">
@Html.EditorFor(m => m.AnredeSpalte)
</form>
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using FMH.Komponente.Basis.Ui.Controls;
using FMH.Komponente.Basis.Ui.Validation.DataAnnotation;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace FMH.Komponente.WebUI.Areas.Basis.Models
{
public class RadioListSpalteBeispielViewModel
{
[Display(Name = "Anrede")]
[UIHint(UiEditor.Basis.RadioList)]
[AdditionalMetadata("Selection", nameof(Anreden))]
[AdditionalMetadata("Direction", FlexDirection.Column)]
public string AnredeSpalte { get; set; } = "f";
public IEnumerable<SelectListItem> Anreden { get; } = new List<SelectListItem>
{
new ("Frau", "f"),
new ("Herr", "m"),
new ("Keine Angabe", "x"),
};
}
}
Darstellung
Standardmässig werden die Radio-Buttons nebeneinander ausgerichtet (FlexDirection.Row). Mit [AdditionalMetadata("Direction", FlexDirection.Column)] richtet das Template sie nach unten aus – jeder Radio-Button steht auf einer eigenen Zeile.
[Display(Name = "Anrede")]
[UIHint(UiEditor.Basis.RadioList)]
[AdditionalMetadata("Selection", nameof(Anreden))]
[AdditionalMetadata("Direction", FlexDirection.Column)]
public string AnredeSpalte { get; set; }
FlexDirection liegt in FMH.Komponente.Basis.Ui.Controls.
| Wert | Wirkung |
|---|---|
FlexDirection.None |
Wie Row (Standard, keine Angabe) |
FlexDirection.Row |
Radio-Buttons nebeneinander – CSS-Klasse fmh-flex-direction-row |
FlexDirection.Column |
Radio-Buttons untereinander – CSS-Klasse fmh-flex-direction-column |
Das Gruppen-Label (GroupLabel) ist Teil desselben Flex-Containers: bei Column steht es über den Radio-Buttons, bei Row in derselben Zeile.