ASP.NET 动态加载用户控件 通过委托响应onclick事件

动态加载用户控件的时候,用户控件中的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)
    {
        //事件内容
    }


这样我们就可以响应动态加载用户控件的带参数的事件了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值