У меня есть этот код в бизнес-классе.
internal ListItemCollection GetAllAgents()
{
DataTable table = dao.GetAllAgents();
ListItemCollection list = new ListItemCollection();
foreach (DataRow row in table.Rows)
{
list.Add(new ListItem(row["agent_name"].ToString(), row["id"].ToString()));
}
return list;
}
Я возвращаю стол из дао без проблем. Я смотрю, как свойства текста и значений заполняются правильно (+1 для какой-то удивительной неграмотности?) И возвращаюсь к презентации, и я связываюсь вот так
Helper helper = new Helper();
ListItemCollection agentList = helper.GetAllAgents();
agentList.Insert(0,"");
this.ddlAgent.DataSource = agentList;
this.ddlAgent.DataBind();
когда получаю полученное значение
this.ddlAgent.SelectedValue
Я ожидаю увидеть идентификатор агента, но получаю текст (имя агента), поэтому я попробовал это
this.ddlAgent.SelectedItem.Value
но я получил те же результаты. Затем я взглянул на генерируемый источник HTML, и он выглядит так
<select name="ctl00$ContentPlaceHolder1$ddlAgent" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddlAgent\',\'\')', 0)" id="ctl00_ContentPlaceHolder1_ddlAgent">
<option selected="selected" value=""></option>
<option value="agent1_name">agent1_name</option>
<option value="agent2_name">agent2_name</option>
этот шаблон продолжается для всех агентов. Я надеюсь, что просто делаю что-то с головой, и вы все можете посмеяться, решая мою проблему:)
Спасибо, ребята.
РЕДАКТИРОВАТЬ: если я сделаю это так
ListItemCollection agentList = helper.GetAllAgents();
agentList.Insert(0,"");
foreach (ListItem agent in agentList)
{
this.ddlAgent.Items.Add(agent);
}
работает нормально.