Atlas 实现机制浅析 [3]
2006-03-17 11:37
351 查看
原文:http://www.blogcn.com/User8/flier_lu/blog/29042138.html
1.3 局部重绘模式的服务器端响应
在第一小节中,我们曾提到 ScriptManager 在重载的 Web.UI.Control.OnInit 事件中,会根据页面请求中 delta = true 是否存在,判断当前页面是否处于局部重绘模式中,并接管 LoadComplete 时间来处理此模式。相应的 OnInit 事件还会在局部重绘模式中,主动接管 Page.Render 方法的逻辑来替换完整页面刷新。
1
protected
override
void
OnInit(EventArgs e)
2
23
private
void
OnPagePreRenderComplete(
object
sender, EventArgs e)
24
private
void
OnPageLoadComplete(
object
sender, EventArgs e)
2
private
void
RenderPageCallback(HtmlTextWriter writer, Control pageControl)
2
private
void
RenderFormCallback(HtmlTextWriter writer, Control containerControl)
2
_onFormSubmitCompleted
=
function
(sender, eventArgs)
2
private
void
RenderPageCallback(HtmlTextWriter writer, Control pageControl)
2
19
private
void
OnPageError(Exception ex)
20
26
private
static
void
OnError(
string
errorMessage, IHttpServerUtility httpServer, IHttpResponse response)
27
<
atlas:ScriptManager
runat
="server"
>
<
ErrorTemplate
>
There was an error processing your action.
<
br
/>
<
span
id
="errorMessageLabel"
></
span
>
<
hr
/>
<
button
type
="button"
id
="okButton"
>
OK
</
button
>
</
ErrorTemplate
>
</
atlas:ScriptManager
>
而 ScriptManager.RenderErrorTemplate 方法会根据模板内容,生成名称为 __ErrorContainer 的 HTML 元素,并最终在客户端解析返回值的 _enterErrorMode 函数中进行更新。
而对重绘区域进行更新的 _updatePanel 函数,将根据 deltaPanels 中给出的 ID,定位到目标的更新区域 span 标签。并将其所有子控件进行析构 (dispose) 和删除 (removeChild),并用 rendering 中返回的内容替换之。
1
_updatePanel
=
function
(panelID, rendering)
2
{
3
var
updatePanelElement
=
document.getElementById(panelID);
4
5
var
elementsToDestroy
=
[];
6
var
childCount
=
updatePanelElement.children.length;
7
8
for
(
var
i
=
0
; i
<
childCount; i
++
)
9
{
10
elementsToDestroy.add(updatePanelElement.children[i]);
11
}
12
13
for
(
var
j
=
0
; j
<
elementsToDestroy.length; j
++
)
14
{
15
if
(elementsToDestroy[j].control)
16
elementsToDestroy[j].control.dispose();
17
18
updatePanelElement.removeChild(elementsToDestroy[j]);
19
}
20
21
updatePanelElement.innerHTML
=
rendering;
22
}
除了上述异常处理的流程外,Altas M1 还在 OnInit 方法中接管了局部重绘模式下的 IHttpContext.ApplicationInstance 对象的 PreSendRequestHeaders 和 Error 事件,分别用于处理页面重定向和全局异常的情况。具体实现机制与上述异常处理机制较为类似,这里就不一一分析了。
至此,一个完整的 Altas 异步请求和局部重绘模式的流程就基本分析完成了,后面有时间将继续就 WebService 支持、数据绑定等实现进行分析,而其原理基本上都是基于之前两节所分析的模式,只不过根据具体的应用有所变化。
1.3 局部重绘模式的服务器端响应
在第一小节中,我们曾提到 ScriptManager 在重载的 Web.UI.Control.OnInit 事件中,会根据页面请求中 delta = true 是否存在,判断当前页面是否处于局部重绘模式中,并接管 LoadComplete 时间来处理此模式。相应的 OnInit 事件还会在局部重绘模式中,主动接管 Page.Render 方法的逻辑来替换完整页面刷新。
1
protected
override
void
OnInit(EventArgs e)
2
23
private
void
OnPagePreRenderComplete(
object
sender, EventArgs e)
24
private
void
OnPageLoadComplete(
object
sender, EventArgs e)
2
private
void
RenderPageCallback(HtmlTextWriter writer, Control pageControl)
2
private
void
RenderFormCallback(HtmlTextWriter writer, Control containerControl)
2
_onFormSubmitCompleted
=
function
(sender, eventArgs)
2
private
void
RenderPageCallback(HtmlTextWriter writer, Control pageControl)
2
19
private
void
OnPageError(Exception ex)
20
26
private
static
void
OnError(
string
errorMessage, IHttpServerUtility httpServer, IHttpResponse response)
27
<
atlas:ScriptManager
runat
="server"
>
<
ErrorTemplate
>
There was an error processing your action.
<
br
/>
<
span
id
="errorMessageLabel"
></
span
>
<
hr
/>
<
button
type
="button"
id
="okButton"
>
OK
</
button
>
</
ErrorTemplate
>
</
atlas:ScriptManager
>
而 ScriptManager.RenderErrorTemplate 方法会根据模板内容,生成名称为 __ErrorContainer 的 HTML 元素,并最终在客户端解析返回值的 _enterErrorMode 函数中进行更新。
而对重绘区域进行更新的 _updatePanel 函数,将根据 deltaPanels 中给出的 ID,定位到目标的更新区域 span 标签。并将其所有子控件进行析构 (dispose) 和删除 (removeChild),并用 rendering 中返回的内容替换之。
1
_updatePanel
=
function
(panelID, rendering)
2
{
3
var
updatePanelElement
=
document.getElementById(panelID);
4
5
var
elementsToDestroy
=
[];
6
var
childCount
=
updatePanelElement.children.length;
7
8
for
(
var
i
=
0
; i
<
childCount; i
++
)
9
{
10
elementsToDestroy.add(updatePanelElement.children[i]);
11
}
12
13
for
(
var
j
=
0
; j
<
elementsToDestroy.length; j
++
)
14
{
15
if
(elementsToDestroy[j].control)
16
elementsToDestroy[j].control.dispose();
17
18
updatePanelElement.removeChild(elementsToDestroy[j]);
19
}
20
21
updatePanelElement.innerHTML
=
rendering;
22
}
除了上述异常处理的流程外,Altas M1 还在 OnInit 方法中接管了局部重绘模式下的 IHttpContext.ApplicationInstance 对象的 PreSendRequestHeaders 和 Error 事件,分别用于处理页面重定向和全局异常的情况。具体实现机制与上述异常处理机制较为类似,这里就不一一分析了。
至此,一个完整的 Altas 异步请求和局部重绘模式的流程就基本分析完成了,后面有时间将继续就 WebService 支持、数据绑定等实现进行分析,而其原理基本上都是基于之前两节所分析的模式,只不过根据具体的应用有所变化。
相关文章推荐
- Atlas 实现机制浅析 [1][转载]
- Atlas 实现机制浅析 [3]
- Atlas 实现机制浅析 [3]
- Atlas 实现机制浅析
- Atlas 实现机制浅析 [2][转载]
- Atlas 实现机制浅析 [3][转载]
- Atlas 实现机制浅析 [2]
- Atlas 实现机制浅析 [1]
- Atlas 实现机制浅析 [1]
- 上周技术关注:Atlas实现机制浅析
- Atlas 实现机制浅析 [2]
- Atlas 实现机制浅析 [1]
- Atlas 实现机制浅析 [2]
- AIDL——实现机制浅析
- .NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
- 浅析 Community Server 在线用户列表与位置跟踪实现机制[原创]
- .NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析(转贴)
- 浅析FreeRTOS_v4.5.0延时机制---vTaskDelay()的实现
- [收藏].NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
- Linux-千兆网卡驱动实现机制浅析