usercontrol在父级中查找按钮控件

时间:2012-04-17 19:52:21

标签: c# asp.net user-controls parent-child

我有一个位于另一个用户控件内的usercontrol,我想要做的是在某个进程运行后找到父控件中的按钮控件并运行OnClick事件。

usercontrol 1

protected void btnReload_Click(object sender, EventArgs e)
{
    //reloads data
}

usercontrol 2(嵌入在usercontrol 1中)

protected void btnSave_Click(object sender, EventArgs e)
{
    Button btnReload = (Button)Parent.FindControl("btnReload");
    //here fire the btnReload onclick even
}

如果这不是我采取推荐的最佳方式,因为我要把头发拉出来。我这样做的原因是因为我有8个页面都需要创建一个新用户,所以我想使用1个usercontrol,但是重新加载他们所创建的新用户的页面。

2 个答案:

答案 0 :(得分:4)

不要这样做。
UserControl应该是一个独立的块,不需要知道它的周围环境。

相反,在UserControl中创建一个事件并在父页面中处理它。您可以将单击处理程序移动到单独的方法,并从按钮单击事件和新的自定义事件中调用该方法。

答案 1 :(得分:1)

有两种方法可以做到:

<强> 1。在服务器端。

你要做的是建筑明智的错误,孩子不应该试图找到父母的控制,也不应该是父母。所以Child控件可以有一个自定义事件,父可以注册它,你可以在子控件的按钮点击事件中触发该事件。

这是一篇可以帮助您入门的文章:http://codebetter.com/brendantompkins/2004/10/06/easily-raise-events-from-asp-net-ascx-user-controls/

这里也讨论了这个问题:How do you determine when a button is clicked in the child on the parent - ASP.NET

<强> 2。客户端:

使用JQuery,您可以捕获子控件的按钮单击事件,然后您可以触发父按钮的单击。您可以使用隐藏变量共享父级按钮的ID。