Events 处理选择dropdownlist和后续事件中的第一项
我在我的aspx页面上有一个dropdownlist,我将其绑定到一个数据源。我注意到选择第一项并没有触发selectedindexchanged事件。开始寻找答案时,我发现最常见的做法是在ddl中放入第一项,要么使用空字符串,要么使用类似于“--Select--”的内容 太好了,成功了。但后来我注意到它仍然触发了我的页面加载事件。在我的页面加载事件中,我检查回发。如果不是,它将数据绑定到中继器和ddl。因此,选择ddl中的第一项会跳过对中继器和ddl的数据绑定,最终我得到一个空白页面 我最初以为我可以通过启用viewstate来解决这个问题,但唉。在这里和那里之后,我在我的代码中加入了以下内容,但我真的觉得它看起来很粗糙。有人有更好的主意吗Events 处理选择dropdownlist和后续事件中的第一项,events,drop-down-menu,asp.net-4.0,Events,Drop Down Menu,Asp.net 4.0,我在我的aspx页面上有一个dropdownlist,我将其绑定到一个数据源。我注意到选择第一项并没有触发selectedindexchanged事件。开始寻找答案时,我发现最常见的做法是在ddl中放入第一项,要么使用空字符串,要么使用类似于“--Select--”的内容 太好了,成功了。但后来我注意到它仍然触发了我的页面加载事件。在我的页面加载事件中,我检查回发。如果不是,它将数据绑定到中继器和ddl。因此,选择ddl中的第一项会跳过对中继器和ddl的数据绑定,最终我得到一个空白页面 我最初以
if (!IsPostBack || RacesDropDownList.SelectedIndex == 0)
{
PopulateControls();
}
首先,需要启用viewstate。如果没有发生回发,则必须将dropdownlist数据绑定到数据源。只需将以下内容添加到页面加载事件中即可:
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();
}
我希望这有帮助。是的,明白了!它现在在页面加载中没有“| | RacesDropDownList.SelectedIndex==0”的情况下工作。非常感谢。