linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·asp.net正则表达式语法
·Office Web Components(OWC)绘
·asp.net ajax客户端编程+jquer
·asp.net 2.0 ajax中使用PopupC
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·Ado.Net读取Excel常见问题总结
·Brettle.Web.NeatUpload.dll支
·C#.Net的常见面试试题和参考答
·如何使IE的后退按钮无效
·ASP.NET DEMO 15: 同时支持行单
·ASP.NET使用Cookie
·asp.net 2.0 ajax中实现弹出窗
·如何在ASP.NET中用OWC绘制图表
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
分清ASP.NET AJAX中的Extender和Behavior模型
[ 作者:  加入时间:2007-12-28 12:23:32  来自:Linux联盟收集整理 ]
ASP.NET AJAX提出了多种模型,在客户端有Component、Control和Behavior模型,在服务器端有ScirptControl和Extender模型。这些模型各有各的用途,但是请注意非常重要的一点:客户端模型和服务器端模型是相互独立的。 xYuLinux联盟
   xYuLinux联盟
    ASP.NET AJAX的重要组件之一是Ajax Control Toolkit,其中包括了大量的Extender和Behavior。其中的Extender使用ASP.NET AJAX提出的Extender模型,在客户端使用了Microsoft AJAX Library提出的Behavior模型。Extender和Behavior模型的组合提供了丰富的效果。那么,究竟什么是Extender模型,什么是Behavior模型呢? xYuLinux联盟
   xYuLinux联盟
    服务器端的Extender控件其实是一个继承了Control类并且实现了IExtenderControl接口的类,我们在开发时也可以直接继承ExtenderControl类,它已经满足了上述条件并且定义了一些常用的方法。Extender控件的作用,简单说来只是想客户端输出脚本,更确切地说,是将需要在页面上执行的脚本告诉ScriptManager,ScriptManager会根据目前的状况(普通加载还是异步回送)选择不同的输出方式。从理论上来说,Extender可以输出任意脚本。因此我们只能说“Ajax Control Tookit中的Extender在客户端使用了Behavior”而不能说“Extender模型在客户端使用了Behavior模型”。 xYuLinux联盟
   xYuLinux联盟
    Behavior模型在客户端提供了丰富的功能,它操作的完全是客户端对象,有些可能会访问Web Service方法,但是这并不影响它仅仅是在客户端工作的这个特性。Behavior完全可以独立于服务器端工作,客户端(浏览器)只是按部就班地执行客户端的代码,它也不会知道究竟是何种服务器技术生成了这些代码。 xYuLinux联盟
   xYuLinux联盟
    因此,我们在使用Ajax Control Tookit时,也必须牢记以下几条: xYuLinux联盟
   xYuLinux联盟
  Extender模型和Behavior模型没有必然联系。 xYuLinux联盟
  Behavior可以独立于Extender执行。 xYuLinux联盟
  所有效果是由Behavior提供的。 xYuLinux联盟
    关于第1条已经在上文中解释过了。在我之前的一篇文章“ModalUpdateProgress控件”中利用了第2条特性。在ModalUpdateProgress控件中我使用了ModalPopupBehavior,我的做法是从ModalPopupExtender中提取所有需要的JavaScript文件,并输出至页面,如下: xYuLinux联盟
   xYuLinux联盟
   xYuLinux联盟
  private IEnumerable<ScriptReference> GetExtenderReferences() xYuLinux联盟
  { xYuLinux联盟
   if (extenderReferences == null) xYuLinux联盟
   { xYuLinux联盟
   lock (typeof(ModalUpdateProgess)) xYuLinux联盟
   { xYuLinux联盟
   if (extenderReferences == null) xYuLinux联盟
   { xYuLinux联盟
   extenderReferences = xYuLinux联盟
   (new ModalPopupExtender() as IExtenderControl).GetScriptReferences(); xYuLinux联盟
   } xYuLinux联盟
   } xYuLinux联盟
   } xYuLinux联盟
   xYuLinux联盟
   return extenderReferences; xYuLinux联盟
  } xYuLinux联盟
   xYuLinux联盟
    因此,我就能够在客户端使用ModalPopupBehavior来构造我所需要的效果了,这里没有Extender,这里只有Behavior。 xYuLinux联盟
   xYuLinux联盟
    关于第3条特性,我认为是最重要的,也是最常利用的一条。我经常会收到例如“如何点击另一个按钮让CollapsiblePanel收缩或打开”或者“如何切换ToggleButton状态”这样的提问,其实这些问题的答案是相同的,使用JavaScript来操作Behavior。Ajax Control Toolkit在服务期端提供的控件实在是太好用了,以至于官方将其托托放放的功能演示了一遍又一遍,乐此不疲。大量的演示却让人忘记了客户段的Behavior才是关键,Behavior才是让客户端丰富多彩的功臣。 xYuLinux联盟
   xYuLinux联盟
    最近有位朋友问我,如何在客户端使用Authentication Service登陆用户以后,用ModalPopupExtender的方式将结果显示给用户呢?其实关键还是在于使用JavaScript来操作ModalPopupBehavior。我在这里演示一下使用JavaScript操作ModalPopupBehavior的方法。 xYuLinux联盟
   xYuLinux联盟
    首先,在服务器端放置一个ScriptManager、一个TextBox、一个Panel和一个ModalPopupBehavior。 xYuLinux联盟
   xYuLinux联盟
   xYuLinux联盟
  <asp:ScriptManager ID="ScriptManager1" runat="server" /> xYuLinux联盟
   xYuLinux联盟
  <asp:TextBox ID="TextBox1" runat="server" style="display:none;" /> xYuLinux联盟
   xYuLinux联盟
  <asp:Panel runat="server" ID="popupPanel" xYuLinux联盟
   style="border: solid 1px black; padding: 10px; width: 300px; display:none;"> xYuLinux联盟
   <b style="font-size: 15pt;">Here's the Message</b> xYuLinux联盟
   <br /> xYuLinux联盟
   <asp:Button ID="Button1" runat="server" Text="Button" /> xYuLinux联盟
  </asp:Panel> xYuLinux联盟
   xYuLinux联盟
  <ajaxToolkit:ModalPopupExtender runat="server" xYuLinux联盟
   TargetControlID="TextBox1" PopupControlID="popupPanel" xYuLinux联盟
   OkControlID="Button1" BehaviorID="modalPopup" /> xYuLinux联盟
   xYuLinux联盟
    一切都是最平常的使用方式,只是以下几点需要注意: xYuLinux联盟
   xYuLinux联盟
  TextBox的display设为none:因为ModalPoupBehavior必须要有一个TargetControl,而这个TargetControl就作为弹出窗口的触发器。我们现在必须把这个触发器隐藏掉,不过请注意不能将其Visible设为False,否则客户端的DOM结构中就没有这个文本框了。 xYuLinux联盟
  弹出Panel的display设为了none:这个已经是使用ModalPoupExtender的规则之一了,如果不将其display设为none,在页面打开的瞬间Panel会出现在页面上,然后马上消失。这样除了让用户看到了Panel之外,还可能影响布局,让页面显得一片混乱。 xYuLinux联盟
  ModalPopupExtender设置了BehaviorID:这是使用JavaScript操作Ajax Control Toolkit中Behavior的关键。在客户端构造Behavior时可以没有ID,但是如果没有ID的话则无法在客户端操作Behavior对象了。 xYuLinux联盟
     然后,我们就可以在客户端放置一个按钮,然后使用JavaScript弹出窗口了。请注意,我们使用了$find通过BehaviorID来得到了ModalPopupBehavior实例,然后调用它的show方法: xYuLinux联盟
   xYuLinux联盟
   xYuLinux联盟
  <input type="button" value="Popup" onclick="$find('modalPopup').show();" /> xYuLinux联盟
   xYuLinux联盟
    这样,窗口就弹出了。其实一切就是这么简单。 xYuLinux联盟
   xYuLinux联盟
    可能唯一的问题就是开发人员并不清楚该调用Behavior的哪个方法来工作。这其实并不构成障碍,我们只要查看Behavior的源代码,看看那些没有下划线前缀的方法(即公有方法)中名字和功能比较接近的即可。这就是使用合适方法名的好处,根本不需要些注释就能明白方法的作用——更何况Ajax Control Toolkit中的Behavior注释非常详细。:) xYuLinux联盟
   xYuLinux联盟
    这才是灵活使用Extender的方式。 xYuLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Asp.net Ajax:我可以用javascript做些什么  (2007-12-13 15:51:42)
 ·asp.net ajax客户端编程+jquery:实现泛型数据的客户端数据调用、添加、删除  (2007-12-13 15:50:59)
 ·Asp.net Ajax 1.0 异步回调时,服务器端Render原理  (2007-11-30 13:27:11)
 ·asp.net ajax 使用updatepanel进行更新后的提示  (2007-11-20 15:20:28)
 ·Asp.net Ajax 1.0 异步回调时,服务器端Render原理1  (2007-11-20 15:19:45)
 ·ASP.NET AJAX 客户端生命周期事件3  (2007-11-12 16:44:09)
 ·ASP.NET AJAX 客户端生命周期事件2  (2007-11-12 16:41:31)
 ·ASP.NET AJAX 客户端生命周期事件1  (2007-11-12 16:40:37)
 ·让 SortTable 和 Asp.net Ajax 和睦相处  (2007-10-26 13:21:44)
 ·Jimmy’s 使用Asp.Net Ajax 构建三层式Web 应用程序  (2007-10-26 13:14:20)