Question

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?

Était-ce utile?

La solution

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

Autres conseils

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

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;
            }
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top