Почему SelectedItem моего DropDownList каждый раз показывает только первый элемент в списке?

У меня проблема с ASP.NET DropDownList, который заполняется файлом XML:

rblState.DataSource = dsState;
rblState.DataValueField = "abbreviation";
rblState.DataTextField = "name";
rblState.DataBind();

Это отлично работает и отображает все правильные данные, однако проблема возникает, когда я пытаюсь получить выбранное значение из списка после нажатия кнопки:

string state = rblState.SelectedItem.Text;
Console.WriteLine(state);

Это всегда выводит только первое значение в списке.

Кто-нибудь знает решение этого?


person RyanDreggs    schedule 01.12.2011    source источник
comment
свойство AutoPostBack этого раскрывающегося списка установлено в true?   -  person MilkyWayJoe    schedule 01.12.2011


Ответы (4)


Вероятно, вы повторно привязываете DataSource к PostBack. Вместо этого сделайте следующее:

//only bind on the first request
if (!Page.IsPostBack)
{
    rblState.DataSource = dsState;
    rblState.DataValueField = "abbreviation";
    rblState.DataTextField = "name";
    rblState.DataBind();

}
person rick schott    schedule 01.12.2011

Попробуйте ввести свои коды заполнения в

if (!Page.IsPostBack)
{
    //your code here
}
person Kemal Can Kara    schedule 01.12.2011

Как и в случае с любыми переменными, вы всегда должны проверять их, прежде чем пытаться вызывать подсвойства.

Проверьте SelectedIndex != -1, чтобы убедиться, что выбрано значение, ИЛИ проверьте, что SelectedItem != null.

Убедитесь, что вы привязываете свой DropDownList только при первой загрузке страницы (как сказал Кемаль).

person Nick Bork    schedule 01.12.2011

в вашем элементе управления установлено свойство runat="server"? Он укусил нас всех в тот или иной момент, я уверен.

Также я считаю, что вы должны установить свой AutoPostBack="true", чтобы он уведомлял сервер, когда вы меняете элемент списка. В противном случае я считаю, что вы должны получить его на стороне клиента, если он не обновляет сервер с помощью вновь выбранной опции.

person Dylan Hayes    schedule 01.12.2011