【问题标题】:Event of dynamically created Control not firing动态创建的控件事件未触发
【发布时间】:2011-07-01 09:20:48
【问题描述】:

我在使用动态创建并插入到我的页面中的 Web 控件时遇到问题。我创建了几个链接按钮,具体取决于所做的搜索数据,并且我正在尝试为每个按钮添加一个事件处理程序,以便过滤结果。

控件已正确初始化,但从未触发事件。

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

有什么想法吗?

【问题讨论】:

  • 如果您将页面或用户控件的ClientIDMode 设置为“静态”`,它是否有效?
  • 我忘了说我用的是ASP.Net 2.0,而且ClientIDMode是4.0才引入的,所以没用...

标签: asp.net vb.net


【解决方案1】:

我终于发现了 ASP.NET 与我的链接按钮有关的问题。

错误是在我的 ID 中为每个 LinkBut​​ton 使用了“$”符号。 ASP.NET 在创建 Postback Javascript 时显然使用 $ 符号来构建控件层次结构。因此它认为 LinkBut​​tons 嵌套在一个不存在的控件中。所以当然不会触发事件。

一旦我删除了 $ 符号,它就可以正常工作了。

【讨论】:

    【解决方案2】:

    你可能想把这段代码放在 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();
            }
    

    【讨论】:

    • 这不会改变任何东西。顺便说一句,我大部分时间都读到最好在 Page_Init 方法中初始化动态控件,以便它们可用于回发。这就是我把它们放在那里的原因。将它们保留在 Page_Load 中会更好吗?
    • 我用一个例子更新了答案,你可能想看看。哦,顺便说一句,我在 Page_Init 中做了同样的事情,它也可以正常工作。所以我怀疑你的 foreach 逻辑中可能有错误。
    • 感谢您的更新。我会在星期二上班时仔细看看。我怀疑控件层次结构中的某些东西是错误的,因为您发布的示例运行正常,而我没有做任何完全不同的事情......
    猜你喜欢
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多