【问题标题】:Handle Button Click Event from User Control loaded dynamically处理动态加载的用户控件中的按钮单击事件
【发布时间】:2010-07-31 15:59:32
【问题描述】:

我有一个空白用户控件(子),在 Page_Load 期间我创建了一些文本框和一个按钮。我还向按钮添加了一个事件。

然后我从另一个用户控件(父控件)中的占位符动态加载该用户控件。 两个控件都正确呈现,但是当我单击按钮时,不会触发事件。 关于如何处理事件的任何想法?

子代码:

 protected void Page_Load(object sender, EventArgs e)
{    
    /*... other user controls ..*/
    UpdateButton = new LinkButton();
    UpdateButton.ID = "buttonid";
    UpdateButton.Text = "text";
    UpdateButton.Click += new EventHandler(UpdateButton_Click);
    this.Controls.Add(UpdateButton);
}

protected override void Render(HtmlTextWriter writer)
{
    for (int i = 0; i < this.Controls.Count; i++)
    {
        this.Controls[i].RenderControl(writer);
    }
}

public void UpdateButton_Click(object sender, EventArgs e)
{
    //Do stuff
}

父代码:

protected void Page_Load(object sender, EventArgs e)
{    
    placeholder.Controls.Clear();
    ChildControl uc = (ChildControl)LoadControl("~/UserControls/ChildControl.ascx");
    placeholder.Controls.Add(uc);
}

如果我直接使用子控件(即没有父控件),点击事件会引发并得到很好的处理。但是当我使用父控件时,调试器甚至不会在 UpdateButton_Click() 中命中断点。

提前致谢。

【问题讨论】:

  • 在使用父子时,子的Page_Load是否正确执行?
  • 是的,确实如此。子控件内的所有控件(文本框、按钮、标签)都正确呈现并且子控件可以正常工作。

标签: asp.net event-handling dynamic loadcontrol


【解决方案1】:

我想我知道会发生什么。在您的父 Page_Load 中,您正在调用 placeholder.Controls.Clear(); 这会执行您的想象并清除控件,包括已发生的任何事件。删除这条线会发生什么?您是否会在每次回发时额外创建一个?

【讨论】:

  • 我删除了该行,每次回发只获得一个子控件,但我仍然无法捕捉到该事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多