Blazor select dropdown set active value by code

10,108

How can I change the selected value to be the default option (in my case the "select one" option with value "") of my dropdown list?

I'm afraid you can do it only with JSInterop as follows:

Generally speaking, the selectedIndex property on the select element is set to 0 after you select an option in the select element. This is done in the selectedValue method...

This is a complete working code snippet. Run it and test it...

@page "/"

<select @ref="myselect" id="myselect" class="form-control"
        @onchange="selectedValue">
    <option selected value="-1">select one</option>
    @foreach (var item in items)
    {
        <option value="@item.ID">@item.Name</option>
    }
</select>

<p>@SelectedValue</p>

@code {
    [Inject] IJSRuntime JSRuntime { get; set; }
    private ElementReference myselect;

    List<Item> items = Enumerable.Range(1, 10).Select(i => new Item { 
        Name = $"Name {i.ToString()}", ID = i }).ToList();

    public string SelectedValue = "";

    public void selectedValue(ChangeEventArgs args)
    {
        SelectedValue = args.Value.ToString();
        var item = items.Single(item => item.ID == Convert.ToInt32(SelectedValue));
        items.Remove(item);

        JSRuntime.InvokeVoidAsync("exampleJsFunctions.selectElement", myselect);
    }

    public class Item
    {
        public string Name { get; set; }
        public int ID { get; set; }
    }
}

Put the following JS code in the _Host.cshtml file:

<script src="_framework/blazor.server.js"></script>
<script>
    window.exampleJsFunctions =
    {
        selectElement: function (element) {
            element.selectedIndex = 0;
        }
    };
</script>
Share:
10,108
user10483669
Author by

user10483669

Updated on June 07, 2022

Comments

  • user10483669
    user10483669 almost 2 years

    I am dynamicaly filling the values of a dropdown list based of the content of a List. when a item in the dropdown is selected an option to remove this item is shown. When the item is removed, it is first removed from the list and then the dropdown list is rebuilt, this is where I run in to problems. Instead of returning the dropdown to its default value when it is rebuilt the value just below the removed one is shown as selected (this happens whitout the @onchange value being triggered). How can i make the dropdown list return to its default value when it is being rebuilt?

    here is some code, Razor code:

    <select class="form-control" @onchange="selectedValue">
       <option value="">select one</option>
       @foreach (var mod in values)
       {
            <option value="@mod.Id">@mod.Name</option>
       }
    </select>
    

    the class named Items that is populationg the list:

    public class Items
    {
        public string Name { get; set; }
        public int Id { get; set; }
        public Items(string name, int id)
        {
            Name = name;
            Id = id;
        }
    }
    

    the list itself (before it is populated):

    public List<Items> itm = new List<Items>();
    

    the function thats called onchange:

    public string SelectedValue = "";
    public void selectedValue(ChangeEventArgs selectEvent)
    {
        SelectedValue = selectEvent.Value.ToString();
    }
    

    so to sum it up, this is what's happening:

    1. the list is pupolated with Items.

    2. the select list is built of the items in the list using a @foreach loop (se razor code).

    3. an item is selected from the dropdown, this runs the selectedValue() function and changes the value ud the SelectedValue string.

    4. the selected item is deleted from the list of items

    5. the dropdown is rebuilt using the modefied list

    6. the selected item is now set to the one directly below the deleted item, this is happening without onchange being run. this is the problem

    7. Now the selected value of the dropdown don't correspond to the one of the SelectedValue string.

    this can probably be solved by setting the element to its default option/value, but i can't figure out how to do this.

    How can I change the selected value to be the default option (in my case the "select one" option with value "") of my dropdown list?

  • user10483669
    user10483669 about 4 years
    I figured that there where a way of doing this using JSInterop but tought that there might be a better way that im just missing. Its sad that there isn't. Im accepting your answer, thanks for the help!
  • Sorush
    Sorush about 4 years
    @user10483669 Yes, it is possible using only blazor. You just need to code everything using html+css+blazor. And do not use select-option structure. Just use <p>, <input> tags, you need a drop-down pop-up, and some events handled by blazor.
  • user10483669
    user10483669 about 4 years
    @Sorush rly? thats gr8th, care to make a example? have not seen any around and diden't quite get it to work on my own.
  • Zapnologica
    Zapnologica over 2 years
    This is a real disappointment. How else would I want to set the selected values? Really not impressed with MudBlazor Select lists so far.