Как программно добавить к элементам списка dropdownlist в ASP.NET?


Я пытаюсь добавить элементы в выпадающий список, используя список ListItems, но он не собирает значение (только текст).

Ниже приведен код (упрощенный от кода, который я на самом деле использую):

    PositionDropDown.DataSource = GetPositionOptions();
    PositionDropDown.DataBind();


    private List<ListItem> GetPositionOptions() 
    {
        List<ListItem> items = new List<ListItem>();
        items.Add(new ListItem("",""));
        items.Add(new ListItem("Top (main)", "TOP"));
        items.Add(new ListItem("Bottom (full width)", "BTM"));
        items.Add(new ListItem("Bottom Left", "MIL"));
        items.Add(new ListItem("Bottom Middle", "MID"));
        return items;
    }

Однако в отображаемом HTML-коде отсутствуют значения, указанные во 2-м параметре конструктора ListItem:

<option value=""></option>
<option value="Top (main)">Top (main)</option>
<option value="Bottom (full width)">Bottom (full width)</option>
<option value="Bottom Left">Bottom Left</option>
<option value="Bottom Middle">Bottom Middle</option>

Почему он не использует указанное " значение "и вместо этого просто повторяет" имя " при рендеринге HTML? Что я делаю не так?

1 6

1 ответ:

Попробуйте использовать этот код. Вы смешиваете добавление элементов вручную с привязкой данных.

private void SetPositionOptions() 
{
    PositionDropDown.Items.Add(new ListItem("",""));
    PositionDropDown.Items.Add(new ListItem("Top (main)", "TOP"));
    PositionDropDown.Items.Add(new ListItem("Bottom (full width)", "BTM"));
    PositionDropDown.Items.Add(new ListItem("Bottom Left", "MIL"));
    PositionDropDown.Items.Add(new ListItem("Bottom Middle", "MID"));
}

Я бы сказал, что если вы хотите сохранить свой код, как он есть, вы должны добавить эти 2 строки

PositionDropDown.DataSource = GetPositionOptions();
PositionDropDown.DataTextField = "Text";
PositionDropDown.DataValueField = "Value";
PositionDropDown.DataBind();
Но это не имеет смысла, вы не должны связывать ListItems.