Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 处理选择dropdownlist和后续事件中的第一项_Events_Drop Down Menu_Asp.net 4.0 - Fatal编程技术网

Events 处理选择dropdownlist和后续事件中的第一项

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的数据绑定,最终我得到一个空白页面 我最初以

我在我的aspx页面上有一个dropdownlist,我将其绑定到一个数据源。我注意到选择第一项并没有触发selectedindexchanged事件。开始寻找答案时,我发现最常见的做法是在ddl中放入第一项,要么使用空字符串,要么使用类似于“--Select--”的内容

太好了,成功了。但后来我注意到它仍然触发了我的页面加载事件。在我的页面加载事件中,我检查回发。如果不是,它将数据绑定到中继器和ddl。因此,选择ddl中的第一项会跳过对中继器和ddl的数据绑定,最终我得到一个空白页面

我最初以为我可以通过启用viewstate来解决这个问题,但唉。在这里和那里之后,我在我的代码中加入了以下内容,但我真的觉得它看起来很粗糙。有人有更好的主意吗

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”的情况下工作。非常感谢。