当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  Asp.net Ajax 1.0 异步回调时,服务器端Render原理 1

 Asp.net Ajax 1.0 异步回调时,服务器端Render原理 1

点击次数:29 次 发布日期:2008-11-26 11:08:55 作者:源代码网
源代码网推荐      首冼回顾一下
源代码网推荐  Page页的生命周期
源代码网推荐  
源代码网推荐  PreInit
源代码网推荐  Init
源代码网推荐  InitComplete
源代码网推荐  LoadState
源代码网推荐  ProcessPostData
源代码网推荐  PreLoad
源代码网推荐  Load
源代码网推荐  LoadComplete
源代码网推荐  PreRender
源代码网推荐  PrepareCallback //如果有回调
源代码网推荐  PreRenderComplete
源代码网推荐  SaveState
源代码网推荐  SaveStateComplete
源代码网推荐  Render
源代码网推荐  
源代码网推荐  不论是Asp.net请求,还是Ajax请求,都要执行上面的页生命周期,
源代码网推荐  
源代码网推荐  在Page页最后会调用Page.RenderControl()呈现Page所有子控件
源代码网推荐  
源代码网推荐  流程如下
源代码网推荐  
源代码网推荐  Page.RenderControl
源代码网推荐   Control.RenderControl()
源代码网推荐   Control.RenderControl(writer,this.Adapter)
源代码网推荐   Control.RenderControlInternal()
源代码网推荐   Control.Render() //此时Page.Render()将其重写
源代码网推荐   Control.RenderChildren()
源代码网推荐   Control.RenderControlInternal()
源代码网推荐  
源代码网推荐  现在关键所在
源代码网推荐  Control.RenderControlInternal()实现如下
源代码网推荐  如果不是Asp.net Ajax处理,肯定会执行foreach依次对所有的子控件进行遍历
源代码网推荐  
源代码网推荐   internal void RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
源代码网推荐   {
源代码网推荐   //正常情况如果不设置RareFields,进行默认的流程依次对所有子控件进行处理,
源代码网推荐   //如果设置RareFields,意思就是以自定义的方式改写RenderChildren
源代码网推荐   if ((this.RareFields != null) && (this.RareFields.RenderMethod != null)) //当您SetRenderMethodDelegate时,RareFieldsEnsured就有值啦
源代码网推荐   {
源代码网推荐   writer.BeginRender();
源代码网推荐  
源代码网推荐   //调用RenderMethod委托,Asp.net Ajax1.0在使用Control.SetRenderMethodDelegate时,对应的回调函数就是在此时处理的
源代码网推荐   this.RareFields.RenderMethod(writer, this);
源代码网推荐   writer.EndRender();
源代码网推荐   }
源代码网推荐   else if (children != null)
源代码网推荐   {
源代码网推荐   //如果不设置这个RareFieldsEnsured,会把Page里所有的控件呈现
源代码网推荐   //依次调用Control里所有子控件的RenderControl
源代码网推荐   foreach (Control control in children)
源代码网推荐   {
源代码网推荐   control.RenderControl(writer);
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐  }
源代码网推荐  
源代码网推荐  以上是Asp.net 的Render处理
源代码网推荐  肯定有人要问上面的if是干吗的,这个可是微软流的接口呀,整个asp.net ajax全靠这个接口进行处理
源代码网推荐  
源代码网推荐  在Asp.netAjax1.0上,你肯定要放一个ScriptManager吧
源代码网推荐  它也是Control的子类,
源代码网推荐  在Page生命周期的OnPreRender时,它会调用
源代码网推荐  
源代码网推荐  PageRequestManager.OnPreRender();
源代码网推荐  
源代码网推荐  
源代码网推荐  问题就在这,PageRequestManager.OnPreRender()实现如下
源代码网推荐  
源代码网推荐  _owner.IPage.SetRenderMethodDelegate(RenderPageCallback);
源代码网推荐  
源代码网推荐  SetRenderMethodDelegate()方法是干什么用的
源代码网推荐  
源代码网推荐  在Control中,当您调用了SetRenderMethodDelegate会给Control.RareFieldsEnsured设置值
源代码网推荐   public void SetRenderMethodDelegate(RenderMethod renderMethod)
源代码网推荐   {
源代码网推荐   //使用OccasionalFields.RareField
源代码网推荐   this.RareFieldsEnsured.RenderMethod = renderMethod;
源代码网推荐   this.Controls.SetCollectionReadOnly("Collection_readonly_Codeblocks");
源代码网推荐   }
源代码网推荐  
源代码网推荐  到这一切就清晰了,当您设置了RenderPageCallback,正常的Asp.net流程就不会再走了,所有的子控件就不会被Render
源代码网推荐  在Asp.netAjax 1.0中使用
源代码网推荐  
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华