OnPreRender与Render区别

      asp.net页面在触发各个子控件的事件之后,会递归调用控件的OnpreRender,然后(注意)递归地将控件的ViewState序列化成一个字符串,最后递归调用控件的Render输出结果(在最高层控件即page控件的Render就会把那个ViewState序列化字符串写到输出的html的隐藏字段中)。

      因此,在Render中创建、改变的内容即使写入ViewState,其实也无法在页面回发之后被恢复,页面回发之后回填的ViewState仍然是OnPreder或者之前的时候得值。

      因此通常,控件的OnPrerender用来最控件的最后最后一次改变(动态生成),而在Render中仅仅用来输出html而并不改变控件自身。另外,控件在vs设计器中的时候,并不是page对象驱动页面显示的。虽然在设计其上看上去很像asp.net应用程序处理页面的结果。起码,设计器并不调用OnPrerender,而是根据Designer标签中说明的方法来调用显示逻辑。这样你就可以让控件在设计器中表现为与运行时不同的结果。例如表格控件在设计器中就不显示所有绑定数据,而是显示自己创建的一组示例数据,以便让你有一个简洁的方式设计界面布局,同时也让连接数据库等等只有在运行时才需要的费时、可能失败的行为在设计时避免执行。
      这里我想到一个常见现象。很多人已经会写自定义控件了。但是其实只了解运行时的控制机制,写出的自定义控件并不支持vs设计器的控制机制。例如这个OnPreRender在设计时并不被调用是很多人不知道的。精通编写自定义控件的人,也许仅仅让其以程序代码的方式被使用,其编写的自定义控件使用在RAD方式的时候并不好用,这是常见的。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值