How to keep SelectListItem value selected after submitting form in ASP.NET Core?

1.4k Views Asked by At

I'm trying to filter a table using a dropdown-list but I'm not able to keep SelectListItem value selected after submitting the form in ASP.NET Core.

The filter seems to work but whenever the page reloads the selected item is always the same

Get Controller

    public ActionResult Index(int myDropDown)
    {
        var myItems= new List<Items>();

        myItems = _myRepository.GetAllItems();

        var filteredItems = myItems.Where(x => x.Color.DemoId == myDropDown);
        
        if (myDropDown != 0 )
        {
            return View(filteredItems);
        }

        return View(myItems);
    }

Index.chtml

<form asp-controller="MyController">
<div class="row">
    <div class="form-group col-3">
        <select class="form-control" id="exampleFormControlSelect1" name="myDropDown" 
                asp-items="(_myRepository.GetDemos()).Select(x => new SelectListItem() 
                             { Text = x.Name, Value = x.Id.ToString()})" onchange="this.form.submit()">

        </select>
    </div>
 </form> 

C# Method

    public List<Demo> GetDemos()
    {
        var demos = _dbContext.Demos.Select(x => new Demo()
        {
            Id = x.Id,
            Name = x.Name
        }).ToList();

        return demos;
    }
1

There are 1 best solutions below

1
Fei Han On BEST ANSWER

trying to filter a table using a dropdown-list but I'm not able to keep SelectListItem value selected after submitting the form

You can try to dynamically set Selected property of SelectListItem, like below.

<select class="form-control" id="exampleFormControlSelect1" name="myDropDown"
        asp-items="(_myRepository.GetDemos()).Select(x => new SelectListItem()
                    { Text = x.Name, Value = x.Id.ToString(), Selected = x.Id == ViewBag.SelectedIndex ? true : false })" onchange="this.form.submit()">
</select>

In action method

public ActionResult Index(int myDropDown)
{
    var myItems = new List<Items>();

    myItems = _myRepository.GetAllItems();

    var filteredItems = myItems.Where(x => x.Color.DemoId == myDropDown);

    //pass selected value through ViewBag etc
    ViewBag.SelectedIndex = myDropDown;

    if (myDropDown != 0)
    {
        return View(filteredItems);
    }

    return View(myItems);
}