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

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

点击次数:21 次 发布日期:2008-11-26 11:08:54 作者:源代码网
源代码网推荐      private void RenderPageCallback(HtmlTextWriter writer, Control pageControl)
源代码网推荐  {
源代码网推荐   ...
源代码网推荐   //取出当前的HtmlForm
源代码网推荐   IHtmlForm formControl = _owner.IPage.Form;
源代码网推荐  
源代码网推荐   //手动设置当FormControl.RenderControl时()回调方法 ,因为这个时候Page.Controls里有子控件不会被Render啦,怎么办
源代码网推荐   //手动处理一个呗
源代码网推荐   formControl.SetRenderMethodDelegate(RenderFormCallback);
源代码网推荐  
源代码网推荐   //同样,HtmlForm.RenderControl不会在Page.Controls里自动触发的
源代码网推荐   //这个时候您需要手动的RenderCtronl一下,这样才能调用RenderFormCallback
源代码网推荐   formControl.RenderControl(formWriter);
源代码网推荐  
源代码网推荐   //生成客户端回调信息|asyncPostBackControlIDs
源代码网推荐   EncodeString(writer, AsyncPostBackControlIDsToken, String.Empty, GetAsyncPostBackControlIDs(false));
源代码网推荐   //生成客户端回调信息 |postBackControlIDs
源代码网推荐   EncodeString(writer, PostBackControlIDsToken, String.Empty, GetPostBackControlIDs(false));
源代码网推荐   //生成客户端回调信息 |updatePanelIDs|tUpdatePanel
源代码网推荐   EncodeString(writer, UpdatePanelIDsToken, String.Empty, GetAllUpdatePanelIDs());
源代码网推荐   //生成客户端回调信息 |childUpdatePanelIDs
源代码网推荐   EncodeString(writer, ChildUpdatePanelIDsToken, String.Empty, GetChildUpdatePanelIDs());
源代码网推荐   //生成客户端回调信息 |panelsToRefreshIDs
源代码网推荐   EncodeString(writer, UpdatePanelsToRefreshToken, String.Empty, GetRefreshingUpdatePanelIDs());
源代码网推荐   //生成客户端回调信息 |asyncPostBackTimeout
源代码网推荐   EncodeString(writer, AsyncPostBackTimeoutToken, String.Empty, _owner.AsyncPostBackTimeout.ToString(CultureInfo.InvariantCulture));
源代码网推荐  
源代码网推荐  ........
源代码网推荐  
源代码网推荐  }
源代码网推荐  
源代码网推荐  private void RenderFormCallback(HtmlTextWriter writer, Control containerControl)
源代码网推荐  {
源代码网推荐   ....
源代码网推荐   //呈现所有的UpdatePanel
源代码网推荐   if (_updatePanelsToRefresh != null)
源代码网推荐   {
源代码网推荐   foreach (UpdatePanel panel in _updatePanelsToRefresh)
源代码网推荐   {
源代码网推荐   if (panel.Visible)
源代码网推荐   {
源代码网推荐   panel.RenderControl(_updatePanelWriter);
源代码网推荐   // 会生成如何的客户端回调信息
源代码网推荐   //169|updatePanel|UpdatePanel1|
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐   }
源代码网推荐   ...
源代码网推荐   //依次将页面上所有控件的RenderControl,写入dummyWriter
源代码网推荐   foreach (Control control in containerControl.Controls)
源代码网推荐   {
源代码网推荐   control.RenderControl(dummyWriter);
源代码网推荐   //生成一部分信息
源代码网推荐   <input type="submit" name="Button1" value="Button" id="Button1" />
源代码网推荐   <input name="txt" type="text" value="wxy" id="txt" />
源代码网推荐   }
源代码网推荐  
源代码网推荐   注意,在RenderFormCallback时,HttpRequest会手动的Flush()将上面的信息刷加IIS
源代码网推荐  }
源代码网推荐  
源代码网推荐  至于Ctronl.Render时,是如何写入HtmlTextWriter,再写入HttpWriter,
源代码网推荐  再写回HttpWorkRequest,最终刷回内核,或使用socket发送回服务器,不在本文讨论范围.......
源代码网推荐  
源代码网推荐  
源代码网推荐  由上可见,Asp.net Ajax,必没有使用传统的HttpRequest.Filter来处理回发信息,而是使用了Asp.net 2.0内置的方式和回调的
源代码网推荐  
源代码网推荐  
源代码网推荐  Asp.net Ajax回调后呈现到客户端有二个部分,一部分是由RenderFormCallback生成的如下
源代码网推荐  
源代码网推荐   RenderFormCallback部分会生成如下的客户端脚本
源代码网推荐   169|updatePanel|UpdatePanel1|
源代码网推荐  
源代码网推荐  <input type="submit" name="Button1" value="Button" id="Button1" />
源代码网推荐   <input name="txt" type="text" value="wxy" id="txt" />
源代码网推荐  
源代码网推荐  一部分是RenderPageCallback生成的
源代码网推荐  
源代码网推荐   52|hiddenField
源代码网推荐  |__VIEWSTATE|/wEPDwUJNjg1NjA3NDcxZGRCX32AH2I/NEq+gCFrVr49kQDECw==|56
源代码网推荐  |hiddenField|__EVENTVALIDATION|/wEWAwKf344xAoznisYGApKGsMIJOfjKisKPYP0O2NXUpNjnA29hMlA=|0
源代码网推荐  |asyncPostBackControlIDs|||0|postBackControlIDs|||13|updatePanelIDs||tUpdatePanel1|0
源代码网推荐  |childUpdatePanelIDs|||12|panelsToRefreshIDs||UpdatePanel1|2|asyncPostBackTimeout||90|12
源代码网推荐  |formAction||Default.aspx|13|pageTitle||Untitled Page|
源代码网推荐  
源代码网推荐  
源代码网推荐  在客户端的部分Sys.WebForm._onFormSubmitCompleted()会对所有的信息以Json type:type,id:id,content:content进行封装
源代码网推荐  取出UpdatePanel,设置其innerhtml,客户端详细部分见赵老大的blogs
源代码网推荐  http://www.cnblogs.com/liuxu-wxy/archive/2007/04/25/727346.html
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


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