首页 / 脚本样式 / Ajax / 分清ASP.NET AJAX中的Extender和Behavior模型
分清ASP.NET AJAX中的Extender和Behavior模型2011-09-27 未知 Jeffrey ZhaoASP.NET AJAX提出了多种模型,在客户端有Component、Control和Behavior模型,在服务器端有 ScirptControl和Extender模型。这些模型各有各的用途,但是请注意非常重要的一点:客户端模型和服 务器端模型是相互独立的。ASP.NET AJAX的重要组件之一是Ajax Control Toolkit,其中包括了大量 的Extender和Behavior。其中的Extender使用ASP.NET AJAX提出的Extender模型,在客户端使用了 Microsoft AJAX Library提出的Behavior模型。Extender和Behavior模型的组合提供了丰富的效果。那么 ,究竟什么是Extender模型,什么是Behavior模型呢?服务器端的Extender控件其实是一个继承 了Control类并且实现了IExtenderControl接口的类,我们在开发时也可以直接继承ExtenderControl类, 它已经满足了上述条件并且定义了一些常用的方法。Extender控件的作用,简单说来只是想客户端输出脚 本,更确切地说,是将需要在页面上执行的脚本告诉ScriptManager,ScriptManager会根据目前的状况( 普通加载还是异步回送)选择不同的输出方式。从理论上来说,Extender可以输出任意脚本。因此我们只 能说“Ajax Control Tookit中的Extender在客户端使用了Behavior”而不能说 “Extender模型在客户端使用了Behavior模型”。Behavior模型在客户端提供了丰富 的功能,它操作的完全是客户端对象,有些可能会访问Web Service方法,但是这并不影响它仅仅是在客 户端工作的这个特性。Behavior完全可以独立于服务器端工作,客户端(浏览器)只是按部就班地执行客 户端的代码,它也不会知道究竟是何种服务器技术生成了这些代码。因此,我们在使用Ajax Control Tookit时,也必须牢记以下几条:Extender模型和Behavior模型没有必然联系。Behavior可以独立于Extender执行。所有效果是由Behavior提供的。关于第1条已 经在上文中解释过了。在我之前的一篇文章“ModalUpdateProgress控件”中利用了第2条特性 。在ModalUpdateProgress控件中我使用了ModalPopupBehavior,我的做法是从ModalPopupExtender中提 取所有需要的JavaScript文件,并输出至页面,如下:private IEnumerable<ScriptReference> GetExtenderReferences()
{
if (extenderReferences == null)
{
lock (typeof(ModalUpdateProgess))
{
if (extenderReferences == null)
{
extenderReferences =
(new ModalPopupExtender() as IExtenderControl).GetScriptReferences();
}
}
}
return extenderReferences;
}