使用event来处理用户控件之间的通讯


User Control之间的通讯有很多种方法。比较简单的是利用session,cookie,viewstate,url parameter,javascript,访问子控件的属性等。但这些方案不是很elegance,容易出错且修改不便。我们可以利用delegate和event来很好地解决这样的问题。

比如有一个aspx文件,包含了2个user control,分别是uc1和uc2。在uc1中的事件发生时需要传递对象到uc2。

在UC1(uc1的类)中我们需要新创建一个event。

public delegate void someHandler(object o);
public event someHandler whenClicked;

第一行我们定义了一个类似函数指针(c#没有指针,这么说帮助理解而已),且定义了它接受一个object参数。第二行定义了这个类有一个叫whenClicked事件。当然这个事件的指针就是someHandler啦。

在这个UC1中比如有一个btnClick事件来激发whenClicked事件:

protected void btnClick(Object sender, EventArgs e)
{
    whenClicked(sourceObject);
}

现在我们设想一下用户在按下鼠标的时候,whenClicked事件被激活了。在aspx中我们要为uc1的whenClicked事件定义具体处理方法:

uc1.whenClicked += new UC1.someHandler(magicMethod);

protected void magicMethod(object o)
{
    uc2.Data = o;
}

UC2只要增加一个属性就可以了:

public object Data
{
    set { targetObject = value; }
}

这样就全部完成了。举一反三,从ascx到aspx也可以用这个方法来传递任何object。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值