相信大家在Asp.net开发中经常会碰到一些问题,那就是有时候不得不在用户控件中通知页面做一些事情。
1.很显然的做法就是,在用户控件声明代理,然后再页面中指定代理的方法。这是一个很好也很方便的事情,定制方式也相对更灵活一些。
2.然而有时候,我们往往需要做的是在用户控件中调用一些方法来为自己做一些事情,而这些方法是在页面的基类当中的,而我们并不想在用户控件重写页面中的方法或者拷贝数据,这违背了高内聚的特点,对后期的代码维护是很不利的。
其实我们可以充分利用.Net的反射性质来实现。
实现思路:
1。获取页面实体。(this.Page)
2.利用反射取得页面的方法。
3.传参进行调用。
参考代码:
protected object CallPage(string methodName,params object[] paras)
{
MethodInfo method = this.Page.GetType().GetMethod(methodName,
BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Private|BindingFlags.Instance);
return method.Invoke(paras);
}