日期:2014-05-17  浏览次数:20498 次

请问一个关于ascx控件文件 与aspx之间方法传递的问题
 以下简称 aspx页为 A页面 ascx为B页面
 我现在想实现这么一个效果 点击B页面的一个按钮执行A页面传递过来的一个方法,资料看的比较多 感觉只有委托能比较好的实现这个效果 但是 由于webnet是没有状态的A页面传递过来的方法在load后就没有了,我尝试使用viewstate来存储但是,但后来查资料发现viewstate只能存储有序数据 例如int string等类型 不能存储方法 请问各位我要如何来实现这个效果呢?

------解决方案--------------------
通过属性来传



------解决方案--------------------
引用:
通过属性来传


+1
------解决方案--------------------
假设
ascx里面有个button叫"按钮1"
再给ascx定义一个EventHandler委托类型的属性叫"属性1"
当ascx放到aspx后ascx叫"用户控件1"

在aspx的Page_Load方法中加入
用户控件1.属性1=方法名1

然后在ascx中Page_Load方法中加入
按钮1.click += this.属性1

这种方式的原理就是,给ascx设置一个EventHandler委托类型的属性,在aspx里面去设置ascx实例的这个属性,即把aspx里面的方法名付给ascx实例的这个属性,最后在ascx中注册click事件,并把这个属性作为click事件触发后的响应。

这种写法,你得理解事件和委托。不然不容易理解,知其然不知其所以然。

当然也可以给ascx定义一个string的属性叫"属性1",然后在aspx设置ascx实例的属性1成string类型的方法名。最后在ascx中获取string类型的方法名,通过反射这个方法名,获取aspx上的这个方法,最后绑定到ascx的按钮1的click上,不过这种方式太麻烦,性能上也没上面的方法好,所以不推荐,至于其他方法应该还有很多。
------解决方案--------------------
楼主应该给你的用户控件定义事件和属性。