我想开发一个用户控件(通过继承UserControl),其中包含一个按钮,单击该按钮可执行多个操作。应该在某处定义这些行动。因此,当我在page1.aspx上起诉控件时,该按钮会执行操作X,当它在page2.aspx上使用并且在那里单击按钮时,操作Y将启动,依此类推。
这是一个很好的方法吗?
谢谢:)
答案 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事件中,根据属性的值以不同方式处理事件。