用户控件 在父级中查找按钮控件

本文关键字:控件 查找 按钮 用户 | 更新日期: 2023-09-27 18:31:22

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

用户控件 1

protected void btnReload_Click(object sender, EventArgs e)
{
    //reloads data
}
用户控件

2(嵌入在用户控件 1 中)

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

如果这不是我接受建议的最佳方式,因为我已经到了为此拔头发的地步。 我这样做的原因是因为我有 8 个页面都需要创建新用户,所以我想为此使用 1 个用户控件,但使用创建的新用户重新加载他们所在的页面。

用户控件 在父级中查找按钮控件

不要那样做。
用户控件应该是一个独立的块,不需要知道其周围环境。

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

有两种方法可以做到这一点:

1. 在服务器端。

你试图做的是建筑明智的错误,孩子不应该试图在父母身上找到控制,父母也不应该。因此,子控件可以具有自定义事件,父控件可以注册到该事件,并且可以在子控件的按钮单击事件上触发该事件。

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

这里也讨论过:你如何确定何时在父项的子项中单击按钮 - ASP.NET

2. 客户端:

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