我的aspx页面上有一个下拉列表,我将其绑定到数据源。我注意到选择第一个项目并没有触发selectedindexchanged事件。开始寻找答案我发现最常见的事情是在ddl中放置第一个项目,要么是空字符串,要么是“---选择---”。
很好,这很有效。但后来我注意到它仍然触发了我的Page_Load事件。在我的Page_Load事件中,我检查回发。如果不是,它会与转发器和ddl进行数据绑定。那么,选择ddl中的第一个项目会跳过数据绑定到转发器和ddl,最后得到一个空白页面。
我首先想到我可以通过启用viewstate来解决这个问题,但是唉。在这里和那里之后,我在我的代码中添加了以下内容,但我觉得它看起来很hacky。有没有人有更好的主意?
if (!IsPostBack || RacesDropDownList.SelectedIndex == 0)
{
PopulateControls();
}
答案 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();
}
我希望这会有所帮助。