动态创建的事件控制未触发

时间:2011-07-01 09:20:49

标签: asp.net vb.net

我遇到了动态创建并插入页面的Web Control的问题。我创建了几个LinkBut​​ton,具体取决于所做的搜索数据,我正在尝试为每个按钮添加一个事件处理程序,因此它会过滤结果。

控件已正确初始化,但事件永远不会被触发。

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
  Controls.Clear()

  Dim btn As Controls.LocalizableLinkButton
  For Each element As Generic.KeyValuePair(Of String, ResultFilterData) In m_list

    btn = New LocalizableLinkButton
    btn.ID = m_Name & "$lnk" & count
    btn.Label = element.Value.Label.Append(" (" + CStr(element.Value.Count) + ")")
    btn.CommandArgument = element.Value.Key
    AddHandler btn.Click, AddressOf Me.btn_Click

    Controls.Add(btn)
  Next
End Sub

由于此代码位于Page_Init中,因此应在回发时重新创建所有控件。 (LocalizableLinkBut​​ton只是LinkBut​​ton的扩展,用于向文本添加多语言功能)。

问题是从不调用方法btn_Click。链接按钮在回调上正确初始化,具有与以前相同的ID。但事件并没有发生。

我正在使用ASP.Net 2.0

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我终于找到了ASP.NET使用Link Buttons的问题。

错误是在每个LinkBut​​ton的ID中使用'$'符号。 ASP.NET显然在创建Postback Javascript时使用$ sign来构建控件层次结构。因此,它认为LinkBut​​tons嵌套在不存在的控件中。所以事件当然不会被解雇。

一旦我删除了$ sign,它就能正常工作。

答案 1 :(得分:0)

您可能希望将这段代码放在Page_Load中并查看。通常建议不要访问此Page_Init中的控件,因为无法保证在此阶段创建控件。

我不是VB人,但我把它放到default.aspx的代码隐藏中,它运行正常。

  protected void Page_Load(object sender, EventArgs e)
        {
            Button button = new Button();
            button.Click += new EventHandler(button_Click);
            button.Text = "test";
            Form.Controls.Add(button);
        }

        void button_Click(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }