我有一个位于另一个用户控件内的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,但是重新加载他们所创建的新用户的页面。
答案 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。