【问题标题】:usercontrol find button control in parentusercontrol 在父级中查找按钮控件
【发布时间】:2012-04-17 19:52:21
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      有两种方法可以做到:

      1.在服务器端。

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

      这里有一篇文章可以帮助您入门: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。

      【讨论】:

      • 好的,这就像我需要的那样工作,但是有没有办法通过事件参数将字符串值从用户控件传递回 aspx?
      • 是的。如果您查看 codebetter 示例,它们有一个继承自 EventArgs 类的 TabClickEventArgs 类。只需遵循该类,无论您要传递什么值,为其创建一个属性,在触发事件之前设置它,并且父级应该得到它。
      • 找到了,但在这一行出现错误:MyControl.TabClicked += new EventHandler(btnNewUser_Click);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多