解决在下拉列表和后续事件中选择第一个项目的问题

时间:2010-12-08 10:27:26

标签: events drop-down-menu asp.net-4.0

我的aspx页面上有一个下拉列表,我将其绑定到数据源。我注意到选择第一个项目并没有触发selectedindexchanged事件。开始寻找答案我发现最常见的事情是在ddl中放置第一个项目,要么是空字符串,要么是“---选择---”。

很好,这很有效。但后来我注意到它仍然触发了我的Page_Load事件。在我的Page_Load事件中,我检查回发。如果不是,它会与转发器和ddl进行数据绑定。那么,选择ddl中的第一个项目会跳过数据绑定到转发器和ddl,最后得到一个空白页面。

我首先想到我可以通过启用viewstate来解决这个问题,但是唉。在这里和那里之后,我在我的代码中添加了以下内容,但我觉得它看起来很hacky。有没有人有更好的主意?

if (!IsPostBack || RacesDropDownList.SelectedIndex == 0)
{
    PopulateControls();
}

1 个答案:

答案 0 :(得分:0)

首先,您需要启用viewstate。如果没有发生回发,则必须将下拉列表数据绑定到数据源。只需将以下内容添加到Page_Load事件中即可:

if (!IsPostBack)
{
    PopulateControls();
}

请记住,默认selectedindex始终为0,如果已更改,则会发生回发,因此您的原始代码已经跳过数据绑定,因为!IsPostBack条件=> “||根本不需要RacesDropDownList.SelectedIndex == 0'。

然后,如果在任何事件上你必须刷新列表,通常的解决方案是在事件处理程序中而不是在Page_Load()中触发PopulateControls()函数。

例如:

protected SelectedIndexChanged(...)
{
// Do something
changeCounter++;

// Not necessary, but good to have
ClearControlsCurrentValues();

// Populate the control again
PopulateControls();
}

我希望这会有所帮助。