Set Selected Item in SelectList Collection
Asked Answered
R

3

5

I have a class with the following property. It constructs a SelectList object from an existing list, and then sets the selected item.

public SelectList ProviderTypeList
{
    get
    {
        SelectList list = new SelectList([...my collection...], "Value", "Key");
        SelectListItem item = list.FirstOrDefault(sli => sli.Text == SelectedProviderType);
        if (item != null)
           item.Selected = true;
       return list;
    }
}

However, when this code is finished, item.Selected is true. But the corresponding item in the SelectList collection is still null.

I can't seem to find a way to update the object in the collection, so that the setting will be used in the resulting HTML.

I'm using @Html.DropDownListFor to render the HTML. But I can see that the object within the collection was not modified as soon as this code has executed.

Can anyone see what I'm missing?

Reta answered 16/5, 2013 at 22:24 Comment(5)
Have you tried setting the SelectedValues property on the list instead of setting Selected on the item?Caitlyncaitrin
I just tried to figure that out, but I get the error that SelectedValues is read-only and cannot be written to.Reta
I see. Maybe this answer can help you? #302354Caitlyncaitrin
please add your dropdown creation codeBattologize
@DaveA: My question is not about the dropdown creation code. As I stated, I can see in the debugger that it is not set.Reta
S
15

There is an optional additional parameter in SelectList

SelectList list = new SelectList([...my collection...], "Value", "Key", SelectedID);

Check the definition

public SelectList(IEnumerable items, string dataValueField, string dataTextField, 
object selectedValue);

which sets the selected value and is of the same type as the dataValueField

Styrene answered 16/5, 2013 at 22:41 Comment(0)
I
1

I have a list of items called id_waers.

var id_waers = db.MONEDAs.Where(m => m.ACTIVO == true).ToList();

where the id is "WAERS".

I will create a SelectList with id_waers values, "WAERS" as id and the text to show will be the id too and show the "USD" value as selected

ViewBag.MONEDA = new SelectList(id_waers, "WAERS", dataTextField: "WAERS", selectedValue: "USD");

default value

I have another options

Implosive answered 3/4, 2018 at 20:0 Comment(2)
Don't just blurt out code. Add some text to explain how it addresses the OP's question. This will improve the long term value of the answer and will prevent it from being deleted by review.Calfskin
Thanks! @CalfskinHatter
H
0

Yes this properties are read only, following code should work:

        SelectList selectList = new SelectList(Service.All, "Id", "Name");
        foreach (SelectListItem item in selectList.Items)
        {
            if (item.Value == yourValue)
            {
                item.Selected = true;
                break;
            }
        }
Harv answered 16/5, 2013 at 22:41 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.