Убедитесь, что для вашего элемента управления установлено значение AutoPostBack = true и что в Page_Load () вы не вызываете ничего, что могло бы стереть или перезаписать содержимое раскрывающегося списка.В частности, я всегда всегда облажался, делая такие вещи, как
protected void Page_Load(object sender, EventArgs e)
{
PopulateDropDownList();
}
, но на самом деле вы должны сказать:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PopulateDropDownList();
}
}
У меня возникли небольшие проблемы с отслеживанием вашего кода, не знаяструктура класса и прочее, но вот фрагмент кода, который я использую в нашем приложении, чтобы заполнить раскрывающийся список текстом и значением:
EmployeeList allemployees = EmployeeManager.GetList();
EmployeeEDropDownList.Items.Clear();
EmployeeEDropDownList.Items.Add(""); //add a blank item on top to simulate no selection
foreach (Employee currentemp in allemployees)
{
EmployeeEDropDownList.Items.Add(new ListItem(currentemp.Name.FullNameE, currentemp.EmployeeID.ToString()));
}
Возможно, это даст вам альтернативную идею.На мой взгляд, это немного «проще» и легче понять, чем то, что у вас есть, но, как я уже сказал, не видя всего вашего приложения, я не могу на самом деле принять такое решение:)
Надеюсь, это поможет.