by SamProf
@page "/" <PageTitle>Aria combo box</PageTitle> <h1>Aria combo box</h1> <input type="text" role="combobox" aria-label="State selector combo box" aria-describedby="state-selector-input-guidance" aria-autocomplete="both" aria-controls="state-selector-dropdown" aria-expanded="@DropdownOpen" aria-activedescendant="@GetActiveDescendantId()" @onkeydown="OnKeyDown" @oninput="OnInput" /> @if (DropdownOpen) { <ol role="listbox" id="state-selector-dropdown" > @for (int i = 0; i < DisplayedOptions.Count; ++i) { bool thisOptionIsSelected = i == _selectedOptionIndex; string style = thisOptionIsSelected ? "background: orange;" : ""; <li id="state-selector-dropdown-option-@i" role="option" style="@style" aria-valuetext="@DisplayedOptions[i]" aria-selected="@thisOptionIsSelected" > @DisplayedOptions[i] </li> } </ol> } <div id="state-selector-input-guidance"> Use this to select a US state or territory. Start typing the name of a state and options will appear. You can't actually select an option, because that isn't important for the purposes of this demo. </div> @code { private IReadOnlyList<string> DisplayedOptions = new string[0]; private bool DropdownOpen { get; set; } private int _selectedOptionIndex = 0; private string GetActiveDescendantId() => DisplayedOptions.Count() > 0 ? $"state-selector-dropdown-option-{_selectedOptionIndex}" : ""; private void OnInput(ChangeEventArgs args) { string newValue = args.Value?.ToString() ?? ""; DisplayedOptions = _states.Where(s => s.StartsWith(newValue, StringComparison.OrdinalIgnoreCase)).ToArray(); DropdownOpen = newValue.Length > 0 && DisplayedOptions.Any(); _selectedOptionIndex = 0; } private void OnKeyDown(KeyboardEventArgs args) { switch (args.Key) { case "ArrowUp": if (DisplayedOptions.Count > 1) { --_selectedOptionIndex; if (_selectedOptionIndex < 0) { _selectedOptionIndex = DisplayedOptions.Count() - 1; } } break; case "ArrowDown": if (DisplayedOptions.Count > 1) { ++_selectedOptionIndex; if (_selectedOptionIndex >= DisplayedOptions.Count()) { _selectedOptionIndex = 0; } } break; } } private readonly IReadOnlyList<string> _states = new [] { "Alabama", "Alaska", "American Samoa", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia", "Guam", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Northern Marianas Islands", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Virgin Islands", "Washington", "West Virginia", "Wisconsin", "Wyoming", }; }
namespace BlazorFiddleProject { using Microsoft.Extensions.DependencyInjection; public class Startup { public void ConfigureServices(IServiceCollection services) { } // Warning: IComponentsApplicationBuilder - not the original .NET 6.0 interface. This was done to make old saves work. public void Configure(IComponentsApplicationBuilder app) { app.AddComponent<App>("app"); } } }
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width"> <title>BlazorFiddleProject</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link href="_content/MatBlazor/dist/matBlazor.css" rel="stylesheet" /> <script src="_content/MatBlazor/dist/matBlazor.js"></script> <style> app { } </style> <script type="text/javascript"> </script> </head> <body> <app>Loading...</app> <script src="_framework/blazor.webassembly.js"></script> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html>

Add component

BlazorFiddle was updated from Blazor 0.7 to .NET 6.0. Your old source code could not work. You need to upgrade to latest.