【问题标题】:Add Event Handler To Dynamic Dropdownlist将事件处理程序添加到动态下拉列表
【发布时间】:2011-01-17 22:40:24
【问题描述】:

我有一个包含动态生成的下拉列表控件的页面,我希望动态下拉列表执行 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),但控件未显示,也未调用 sub。我在 ChangeValue 子中放置了一个断点,但任何事情都发生了。

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

你能帮帮我吗?

非常感谢,
安德烈亚

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

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

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

    【讨论】:

    • 抱歉,在剪切和粘贴过程中我删除了该行,我正在将其修复到我的帖子中
    • @Andrea:我也编辑了我的答案,而你评论它;)
    • 是的!它有效,当我尝试在 !ispostback 之外执行代码时,我错过了 ID :)
    • 也感谢您对每个控件的重新创建的解释(您可以防止我的下一个潜在问题!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2010-12-04
    • 2017-01-20
    • 1970-01-01
    • 2018-04-23
    相关资源
    最近更新 更多