Cascader
A hierarchy picker that shows nested options one level at a time in side-by-side columns, or as a flat list of full paths while searching.
Default
The first column lists the roots, and each branch you open adds a column. Only the key is stored — the trigger caption rebuilds the full path ("Engineering / Platform / Runtime") from
Items. Browsing without choosing is discarded when the popup closes, so the columns always reopen on the current value.Full-Path Search
Typing replaces the columns with a flat list of full paths, so "platform / run" finds "Engineering / Platform / Runtime" without opening a single branch. Matching is case-insensitive against the joined path text. Results hold leaves only, unless
ChangeOnSelect is on.Selectable Branches
By default a branch is navigation only, so the value is always a leaf. Turn on
ChangeOnSelect and clicking a branch selects it and opens its column, so "Engineering" is a valid answer and the user can still drill deeper. Only a leaf closes the popup.No Search and Disabled
With
ShowSearch="false", focus starts on the selected item instead of a search box — use the arrow keys to move within and between levels. A disabled cascader keeps the selected path visible but cannot be opened, and its hidden input is not submitted.Inside an EditForm
ValueExpression comes from @bind-Value, so every change notifies the EditContext and the trigger picks up aria-invalid while the field has messages. Required only sets aria-required — use a model attribute to actually enforce the value.