将事件处理程序添加到动态下拉列表

时间:2011-01-17 22:40:25

标签: asp.net vb.net

我有一个页面,其中包含动态生成的下拉列表控件,我希望动态下拉列表执行AutoPostback以使用所选值填充其他字段。这是我用来动态创建控件的代码:

        If (Not IsPostBack) Then 
          Dim newDDL As DropDownList = New DropDownList()
          AddHandler newDDL.SelectedIndexChanged, AddressOf ChangeValue
          newDDL.ID = "Level1"
          [fill the DropDownList]
          newDDL.Items.Insert(results.Count, New ListItem("", -1))
          newDDL.Width = "300"     
          newDDL.AutoPostBack = True
          newDDL.SelectedIndex = results.Count

          LevelDDLs.Controls.Add(newDDL)
          LevelDDLs.Controls.Add(New LiteralControl("<br /><br />"))
    End If

在ASP页面上正确填充和呈现控件,但是在选择一个值后,页面将被重新加载(调用AutoPostBack)但控件不会显示,并且不会调用子控件。我在ChangeValue子中放了一个断点但是发生了什么。

我在帖子上读到第一个DropDownList的处理程序不是必需的,但是,如何告诉DropDownList在changevalue之后调用我的sub?

请问你能帮帮我吗?

非常感谢,
安德烈

1 个答案:

答案 0 :(得分:1)

您必须设置Dropdown的ID,否则他们不会从ViewState重新创建他们的selectedindex并且不会引发任何事件。他们必须在每次回发中获得相同的唯一ID。

还必须在每次回发时重新创建动态添加的每个控件。这应该最迟在Page_Load中完成,因为在此page life cycle阶段后,将保存视图状态。