1

我有一个位于另一个用户控件内的用户控件,我想做的是在某个进程运行后找到父控件中的按钮控件并运行 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 个用户控件,但重新加载他们所在的页面并创建新用户。

4

2 回答 2

4

不要那样做。
UserControl 应该是一个独立的块,不需要了解其周围环境。

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

于 2012-04-17T19:54:30.807 回答
1

有两种方法可以做到:

1. 在服务器端。

你试图做的是架构方面的错误,孩子不应该试图在父母身上找到控制权,父母也不应该。所以子控件可以有一个自定义事件,父控件可以注册到它,您可以在子控件的按钮单击事件上触发该事件。

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

此处也对此进行了讨论:您如何确定何时单击父级上的子级中的按钮-ASP.NET

2.客户端:

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

于 2012-04-17T19:57:18.477 回答