UserControl有一个可以处理多个动作的按钮?

时间:2010-12-21 13:59:57

标签: c# asp.net user-controls

我想开发一个用户控件(通过继承UserControl),其中包含一个按钮,单击该按钮可执行多个操作。应该在某处定义这些行动。因此,当我在page1.aspx上起诉控件时,该按钮会执行操作X,当它在page2.aspx上使用并且在那里单击按钮时,操作Y将启动,依此类推。

这是一个很好的方法吗?

谢谢:)

4 个答案:

答案 0 :(得分:1)

考虑创建一个用户控件,该控件接受一个“包含”的用户控件,该控件公开一个众所周知的界面:

public interface IActionable
{
    void DoButtonAction(object param);
}

然后为实现IActionable的每个页面创建单独的用户控件。当单击按钮时,容器所要做的就是在包含的UserControl上执行DoButtonAction()。每个页面的UserControl都可以定义DoButtonAction()实际执行的操作。

答案 1 :(得分:1)

如果行为非常特定于控件类型,则可以执行以下操作

创建枚举

public enum MyUserControlAction
{
    FirstAction = 0,
    SecondAction = 1,
    ThirdAction = 2
}

然后在您的用户控件上创建一个公共属性

public MyUserControlAction Action {get;set;}

然后在您的用户控件按钮中单击处理程序

protected void btn_Click(object sender,EventArgs e)
{
    switch (this.Action)
    {
        case MyUserControlAction.FirstAction:DoSomething();break;
        case MyUserControlAction.SecondAction:DoSomethingElse();break;
        case MyUserControlAction.ThirdAction:DoSomethingAgain();break;
    }
}

然后当你添加到表单

<cc1:MyUserControl runat="server" Action="FirstAction" ID="ctrl1" />
<cc1:MyUserControl runat="server" Action="SecondAction" ID="ctrl2" />
<cc1:MyUserControl runat="server" Action="ThirdAction" ID="ctrl3" />

另一个解决方案是公开点击

public event EventHandler<EventArgs> Click;

protected virtual void OnClick()
{
     if (this.Click !=null)
     {
          this.Click.Invoke(this,EventArgs.Empty);
     }
}

然后在按钮中单击

protected void btn_Click(object sender,EventArgs e)
{
    this.OnClick();
}

然后,您可以将按钮上的点击作为用户控件上的事件处理,您可以执行您喜欢的操作...

答案 2 :(得分:0)

您可以在每个页面中为CommandArgument属性赋值,然后根据值执行相应的操作。

答案 3 :(得分:0)

为您的用户控件创建一个属性,例如只是一个int。

然后在Button Click事件中,根据属性的值以不同方式处理事件。