如何捕获动态加载控件的onclick事件?

时间:2011-08-16 16:48:57

标签: c# asp.net user-controls

我有一个下拉列表(在页面上),它有OnSelectedIndexChange事件,每次(使用LoadControl命令)动态加载不同的Control(ascx) - 进入页面。

每个控件都有一个按钮(runat = server)和TextBox(runat = server)。

当我点击按钮时 - 我无法进入Onclick功能。

如何进入Ascx的OnClick功能?

我知道每个SelectedIndexChange都会进行回发 - 所以我知道我必须在viewstate中保存一些内容。但我不知道如何保存它,然后在TexstBox上获取值。 (每个ascx)

1 个答案:

答案 0 :(得分:1)

您需要向用户控件添加事件处理程序,如下所示:

public event EventHandler ButtonClick;

在按钮的点击事件中:

protected void Button1_Click(object sender, EventArgs e)
{
    if (this.ButtonClick != null)
        this.ButtonClick(this, e);
}

然后,从页面中,您可以获得这样的点击事件:

<UC:MyUserControl ID="UserControl1" runat="server" OnButtonClick="UserControl1_ButtonClick" ... />

protected void UserControl1_ButtonClick(object sender, EventArgs e)
{
   //Handle the click event here
}

如果您正在动态加载控件,那么您需要确保控件在回发后重新水化,并通过代码协助事件处理程序来模拟上面的代码:

MyUserControl ctrl = (MyUserControl)this.LoadControl("...");
ctrl.ButtonClick += new EventHandler(UserControl1_ButtonClick);