在asp.net中,DDL的选定索引总是等于零

本文关键字:索引 等于零 net asp DDL | 更新日期: 2023-09-27 18:01:01

我有一个程序类,属性为Id、ProgramName、ShortName和Code,在我的应用程序中我有一个类似的ASP DDL

<asp:DropDownList ID="DDLProgram" runat="server" 
            OnSelectedIndexChanged ="OnDDLProgramChanged" AutoPostBack = "true">
    </asp:DropDownList>

My OnDDLProgramChanged方法被定义为

protected void OnDDLProgramChanged(object sender, EventArgs e)
        {
            List<CcProgramEntity> programEntities = GetAllPrograms();
            DDLProgram.DataSource = programEntities;
            DDLProgram.DataTextField = "Shortname";
            DDLProgram.DataValueField = "Id";
            //My Problem goes here
            string programCode = programEntities[DDLProgram.SelectedIndex].Code;
        }

我的列表正在正确地获取所有记录,我已经检查了它。但每当我更改DDL中的项目时,所选的索引都不会更改。所选索引保持为零。因此,除了0索引的项之外,我无法获得其他项的代码。

在这种情况下有人能帮我吗?

在asp.net中,DDL的选定索引总是等于零

您正在selectedIndex Change event中再次绑定数据,它将在重新绑定后重置您当前的SelectedIndex。您不需要将数据重新绑定到SelectedIndex Change Event 中的下拉列表

应该是。。

protected void OnDDLProgramChanged(object sender, EventArgs e)
    {
        string programCode = programEntities[DDLProgram.SelectedIndex].Code;
    }

您必须在页面加载方法上将数据绑定到DropDownList

if (!IsPostBack)
{
    DDLProgram.DataSource = programEntities;
    DDLProgram.DataTextField = "Shortname";
    DDLProgram.DataValueField = "Id";
    DDLProgram.DataBind();
}

否则,它将每次绑定数据,从而清除选择

为什么在OnDDLProgramChanged中分配DataSource,这将重置您所做的选择。