Установить выбранный элемент в коллекции SelectList

У меня есть класс со следующим свойством. Он создает объект SelectList из существующего списка, а затем устанавливает выбранный элемент.

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;
    }
}

Однако, когда этот код закончен, item.Selected истинно. Но соответствующий элемент в коллекции SelectList по-прежнему нулевой.

Кажется, я не могу найти способ обновить объект в коллекции, чтобы этот параметр использовался в результирующем HTML.

Я использую @Html.DropDownListFor для рендеринга HTML. Но я вижу, что объект в коллекции не был изменен, как только этот код был выполнен.

Кто-нибудь может увидеть, что мне не хватает?


person Jonathan Wood    schedule 16.05.2013    source источник
comment
Вы пытались установить свойство SelectedValues в списке вместо установки Selected для элемента?   -  person Jan Dörrenhaus    schedule 17.05.2013
comment
Я просто пытался это понять, но получаю сообщение об ошибке SelectedValues только для чтения и не может быть записан.   -  person Jonathan Wood    schedule 17.05.2013
comment
Я понимаю. Может, этот ответ вам поможет? stackoverflow.com/questions/301854 /   -  person Jan Dörrenhaus    schedule 17.05.2013
comment
пожалуйста, добавьте свой код создания раскрывающегося списка   -  person Dave Alperovich    schedule 17.05.2013
comment
@DaveA: Мой вопрос не о коде создания выпадающего списка. Как я уже сказал, в отладчике я вижу, что он не установлен.   -  person Jonathan Wood    schedule 17.05.2013


Ответы (3)


В SelectList есть необязательный дополнительный параметр

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

Проверить определение

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

который устанавливает выбранное значение и имеет тот же тип, что и dataValueField

person Peter Smith    schedule 16.05.2013

У меня есть список элементов id_waers.

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

где идентификатор - "WAERS".

Я создам SelectList со значениями id_waers, «WAERS» в качестве идентификатора, и отображаемый текст также будет идентификатором и покажет значение «USD» как выбранное.

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

значение по умолчанию

У меня есть другие варианты

person Matías Gallegos    schedule 03.04.2018
comment
Не просто выпаливайте код. Добавьте текст, чтобы объяснить, как он отвечает на вопрос OP. Это улучшит долгосрочную ценность ответа и предотвратит его удаление при просмотре. - person NightOwl888; 03.04.2018
comment
Спасибо! @ NightOwl888 - person Matías Gallegos; 07.08.2020

Да, эти свойства доступны только для чтения, следующий код должен работать:

        SelectList selectList = new SelectList(Service.All, "Id", "Name");
        foreach (SelectListItem item in selectList.Items)
        {
            if (item.Value == yourValue)
            {
                item.Selected = true;
                break;
            }
        }
person Khurshid    schedule 16.05.2013