儿童用户控制按钮点击不工作?

时间:2011-07-13 12:55:42

标签: asp.net

我遇到了用户控件的问题。我有三个用户控件:Usercontrol1Usercontrol2Usercontrol3Usercontrol3有一个“提交”按钮。控件嵌套如下:

  default.aspx
    UserControl1
      UserControl2
        UserControl3
          Submit Button

当我运行我的应用程序时,页面上会显示提交按钮,但是当我单击此按钮时,不会引发单击事件。这是为什么?

1 个答案:

答案 0 :(得分:1)

很难说你没有发布任何代码,但是你遇到的问题可能是你的事件处理程序可能是在default.aspx.cs的代码隐藏中而不是在UserControl3中定义的.ascx.cs。您的default.aspx页面不了解其任何控件的内部。这是封装的原则; default.aspx只能看到自己成员的公共接口,特别是UserControl1

我不知道您的控件的用途,但从组件化的角度来看,您的结构可能没有意义。如果提交按钮在逻辑上属于页面,则将提交按钮放在页面中可能更有意义。如果确实有意义,那么您可能希望遵循以下模式:向UserControls添加事件,以便将它们暴露给包含它们的页面/控件。例如:

public class UserControl1
{
    public event EventHandler Submit
    {
        add { this.UserControl2.Submit += value; }
        remove { this.UserControl2.Submit -= value; }
    }
}

public class UserControl2
{
    public event EventHandler Submit
    {
        add { this.UserControl3.Submit += value; }
        remove { this.UserControl3.Submit -= value; }
    }
}

public class UserControl3
{
    public event EventHandler Submit
    {
        add { this.SubmitButton.Click += value; }
        remove { this.SubmitButton.Submit -= value; }
    }
}

通过此设置,该页面可以处理您的UserControl1的{​​{1}}事件。在我看来,另一个更糟糕的选择是通过遍历其子代来附加到页面代码中的提交按钮的事件处理程序:

Submit