ASP.NET 动态加载用户控件 通过委托响应onclick事件
程序员文章站
2022-06-08 18:07:36
...
动态加载用户控件的时候,用户控件中的button事件是未被注册的,所以我们可以通过增加事件委托来调用后台方法。
详细过程:(假定用户控件为Calculator.ascx.cs,动态添加用户控件的页面是Search.aspx)
Calculator.ascx.cs中的处理:
1. 定义public的事件委托,如clickeventhandler;2. 在Calculator类中声明事件,如click;
3. 在Calculator类中定义引发事件的方法,如onclick()方法;
4. 在Calculator类的相关方法中调用引发事件的方法,如在button_click()中调用onclick()。
5.假如要带参数可以自定义EventArgs(这里我定义了一个TextChangeEventArgs)
用户控件类中附加的代码:
public delegate void ClickEventHandler(object sender, TextChangeEventArgs e);
public event ClickEventHandler Click;
protected void OnClick(TextChangeEventArgs tc)
{
if (Click != null) Click(this, tc);
}
public void Button_Click(object sender, System.EventArgs e)
{
TextChangeEventArgs tc = new TextChangeEventArgs();
tc.Message = hf.Value;
this.OnClick(tc);
}
TextChangeEventArgs类中的代码:
public class TextChangeEventArgs : EventArgs
{
private string message;
public string Message
{
set { message = value; }
get { return message; }
}
}
Search.aspx.cs文件中的处理(假定有多个用户控件):
1. initializecomponent()中增加事件处理程序,采用findcontrol方法找到usercontrol;
2. 定义事件处理方法,在该方法中处理usercontrol的事件,如usercontrol_clicked()。
private void InitializeComponent(int len)
{
this.Load += new System.EventHandler(this.Page_Load);
for (int i = 0; i < len; i++)
{
Calculator uc = this.FindControl("CalculatorID"+i) as Calculator;
TextChangeEventArgs tc = new TextChangeEventArgs ();
uc.Click += new Calculator.ClickEventHandler(this.UserControl_Clicked);
}
}
private void UserControl_Clicked(object sender, TextChangeEventArgs e)
{
//事件内容
}
上一篇: 牛奶韭菜能够放在一起吃吗
下一篇: TagSupport