web用户控件和自定义控件的区别?

     Web用户控件其实是“大页面中的小页面”,它原本就是普通的web页面,只不过将后缀改了,然后嵌套在其他页面里。
用户控件开发比较简单,就像设计一般的ASPX页面一样,但是不能跨应用程序来部署!
      Web自定义控件其实和asp.net本身提供的控件一样,只不过它没有集成在安装程序里,他的制作者可以是第3方,通常情况下被称为第三方组件!


对于自定义控件你必须要熟悉ASP.NET控件机制,比方说事件机制,控件生命周期,复用成本可能比较高!通常不具备效率的可比性!
     下面我们来谈一下ASP.NET控件生命周期的问题:

        1.实例化(Instantiate)

            控件被页面或者另一个控件通过调用它的构造器所实例化.这个步骤所列出的阶段,仅当控件加入控件树中才会发生!

        2.初始化(Initialize)

            初始化在传入WEB请求生命周期内所需的设置.在此阶段,控件树中的页面和全部控件通过默认方式来调用OnInit方法.开发人员可以通过重载OnInit方法,为控件提供初始化逻辑.在其生命周期的这个时候,控件能够安全的访问其置于Controls集合中的子控件,但是它不能访问控件层次中的父控件或者其他层次更高的控件(页面).

        3.开始跟踪视图状态(Begin Tracking View State)

            这个阶段发生在初始化阶段的末尾.在这个阶段,页面自动调用TrackViewState方法.TrackViewState方法保证在此阶段之后,使用ViewState字典属性而产生的变化保存在控件视图状态中.在大多数情况下,Control基类提供的TrackViewState方法实现已经足够了,只有在控件定义了复杂属性的时候,才必须重载TrackViewState方法

        4.加载视图状态(仅用于回传过程)(Load View State[Postback only])

            这个阶段发生在回传时,而不是初始请求过程中,在此阶段结束时,就会自动填充控件的ViewState属性控件可以重写loadViewState方法的默认实现,将自定义状态还原!

        5.加载回传数据(仅用于回传过程,为可选项)(Load Postback Data(Postback only,optional))

            只有在控件通过实现IPostBackDataHandler接口参与了回传数据处理时,这个阶段才发生在会传中.TextBox控件就是一个例子.在这个阶段中,控件必须从已经发送的表单数据中,通过实现IPostBackDataHandler接口的LoadPostData方法更新其状态!

        6.加载(Load)

            直到此阶段开始,空间树中的所有控件都已经被初始化,并恢复到他们在先前周期最后的状态.Onload方法会执行所有请求共有的操作,如设置数据库查询.此时,树中的服务器控件已经创建并初始化,状态已经还原并且窗体控件反映了客户端的数据.如果需要实现仅在页面初始请求中执行的逻辑,那么实现该逻辑时,应该检查页面的IsPostBack属性!

        7.引发修改事件(仅用于回传过程,为可选项)(Raise Changed Events(Postback only,optional))

            只有在控件通过实现IPostBackDataHandle接口参与了回传数据处理时,这个阶段才发生在回传中.在此阶段中,控件通过引发事件(如TextBox的TextChanged事件)作为一种信号------其状态由于回传而改变(引发更改事件以响应当前和以前回发之间的状态更改).为了参与此阶段,控件必须实现IPostBackDataHandler接口的RaisePostDataChangedEvent方法.

        8.引发回传事件(仅用于回传过程,为可选项)(Raise Postback Events(postback only,optional))

            只有在控件通过实现IPostBackEventHandler接口参与了回传数据处理时,这个阶段才发生在会传中.在此阶段可以通过实现IPostBackEventHandler接口的RaisePostBackEvent方法来实现逻辑,以便把客户端事件映射到服务器端事件.

        9.预生成(PreRender)

            在此阶段中,应该通过重载OnpreRender方法,执行在生成控件之前所需要的任何工作.在生成输出之前执行任何更新,可以保存在预生成阶段对控件状态所做的更改,而在生成阶段所对应的更改则会丢失!

        10.保存视图状态(Save View State)

            如果控件不维持状态,或者它为了保存其所有状态信息而使用ViewState字典,那么不必在此阶段期间实现任何附加逻辑.在此阶段期间,页面框架会自动保存ViewState字典.如果需要自定义状态管理,必须通过重载SaveViewState方法来实现自定义状态恢复,这种方法只被EnableViewState属性为true的控件所调用.在此阶段以后任何控件的改变都不会保存在控件的视图状态中!

        11.生成(Render)

            通过这种方法,控件在输出流上通过重载Control的Render方法或者WebControl类的rendering方法中的一种,来写标记文本!

        12.卸载(Unload)

            在此阶段中,页面通过实现Page_Unload方法,来执行清楚操作.作为控件开发者,应该重载Dispose方法来执行清楚操作!

        13.释放(Dispose)

            在这个阶段中,应该重载Dispose方法来释放控件所占有的全部资源!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值