ASP.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时,也必须牢记以下几条:
  1. Extender模型和Behavior模型没有必然联系。
  2. Behavior可以独立于Extender执行。
  3. 所有效果是由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;
}

因此,我就能够在客户端使用ModalPopupBehavior来构造我所需要的效果了,这里没有Extender,这里只有Behavior。
关于第3条特性,我认为是最重要的,也是最常利用的一条。我经常会收到例如“如何点击另一个按钮让CollapsiblePanel收缩或打开”或者“如何切换ToggleButton状态”这样的提问,其实这些问题的答案是相同的,使用JavaScript来操作Behavior。Ajax Control Toolkit在服务期端提供的控件实在是太好用了,以至于官方将其托托放放的功能演示了一遍又一遍,乐此不疲。大量的演示却让人忘记了客户段的Behavior才是关键,Behavior才是让客户端丰富多彩的功臣。
最近有位朋友问我,如何在客户端使用Authentication Service登陆用户以后,用ModalPopupExtender的方式将结果显示给用户呢?其实关键还是在于使用JavaScript来操作ModalPopupBehavior。我在这里演示一下使用JavaScript操作ModalPopupBehavior的方法。
首先,在服务器端放置一个ScriptManager、一个TextBox、一个Panel和一个ModalPopupBehavior。
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:TextBox ID="TextBox1" runat="server" style="display:none;" />
<asp:Panel runat="server" ID="popupPanel"style="border: solid 1px black; padding: 10px; width: 300px; display:none;"><b style="font-size: 15pt;">Here's the Message</b><br /><asp:Button ID="Button1" runat="server" Text="Button" />
</asp:Panel>
<ajaxToolkit:ModalPopupExtender runat="server"TargetControlID="TextBox1" PopupControlID="popupPanel"OkControlID="Button1" BehaviorID="modalPopup" />

一切都是最平常的使用方式,只是以下几点需要注意:
  1. TextBox的display设为none:因为ModalPoupBehavior必须要有一个TargetControl,而这个TargetControl就作为弹出窗口的触发器。我们现在必须把这个触发器隐藏掉,不过请注意不能将其Visible设为False,否则客户端的DOM结构中就没有这个文本框了。
  2. 弹出Panel的display设为了none:这个已经是使用ModalPoupExtender的规则之一了,如果不将其display设为none,在页面打开的瞬间Panel会出现在页面上,然后马上消失。这样除了让用户看到了Panel之外,还可能影响布局,让页面显得一片混乱。
  3. ModalPopupExtender设置了BehaviorID:这是使用JavaScript操作Ajax Control Toolkit中Behavior的关键。在客户端构造Behavior时可以没有ID,但是如果没有ID的话则无法在客户端操作Behavior对象了。
然后,我们就可以在客户端放置一个按钮,然后使用JavaScript弹出窗口了。请注意,我们使用了$find通过BehaviorID来得到了ModalPopupBehavior实例,然后调用它的show方法:
<input type="button" value="Popup" onclick="$find('modalPopup').show();" />

这样,窗口就弹出了。其实一切就是这么简单。
可能唯一的问题就是开发人员并不清楚该调用Behavior的哪个方法来工作。这其实并不构成障碍,我们只要查看Behavior的源代码,看看那些没有下划线前缀的方法(即公有方法)中名字和功能比较接近的即可。这就是使用合适方法名的好处,根本不需要些注释就能明白方法的作用——更何况Ajax Control Toolkit中的Behavior注释非常详细。:)
这才是灵活使用Extender的方式。

©著作权归作者所有:来自51CTO博客作者jeffz的原创作品,如需转载,请与作者联系,否则将追究法律责任
AJAX 模型 ASP.NET Ajax & Atlas相关

0

分享

微博 QQ 微信

收藏

上一篇:深入JavaScript与.NE... 下一篇:深入JavaScript与.NE...
jeffz

238篇文章,49W+人气,0粉丝

Ctrl+Enter 发布

发布

取消

推荐专栏更多

VMware vSAN中小企业应用案例

掌握VMware超融合技术

共41章 | 王春海

¥51.00 346人订阅

订   阅

基于Kubernetes企业级容器云平台落地与实践

容器私有云平台实践之路

共15章 | 李振良OK

¥51.00 596人订阅

订   阅

网工2.0晋级攻略 ——零基础入门Python/Ansible

网络工程师2.0进阶指南

共30章 | 姜汁啤酒

¥51.00 1566人订阅

订   阅

负载均衡高手炼成记

高并发架构之路

共15章 | sery

¥51.00 507人订阅

订   阅

带你玩转高可用

前百度高级工程师的架构高可用实战

共15章 | 曹林华

¥51.00 462人订阅

订   阅

猜你喜欢

我的友情链接 扩展LINQ to SQL:使用Lambda Expression批量删除数据 简述centOS 7系统用户和组的管理及配置 解析DELL R710服务器迁移操作内容 开学季出大事:某教育局丢失3台虚拟机 EVA4400存储虚拟机+数据库数据恢复成功案例 服务器数据恢复通用方法+服务器分区丢失恢复案例 在CentOS7上部署squid缓存服务器及代理功能 EMC 5400服务器raid阵列瘫痪数据恢复成功案例 服务器数据恢复案例 / raid5阵列多块硬盘离线处理方法 华为存储服务器卷丢失数据恢复成功案例 斐讯K3C路由器无需刷机用vlmcsd搭建KMS服务器激活Windows&office 高校服务器虚拟化——高校数据中心建设 【长文+图片】HP FC MSA2000服务器瘫痪数据恢复过程 服务器断电瘫痪数据丢失后恢复数据的过程 华为5800服务器raid阵列数据恢复成功案例 【长文慎点】IBM X3850服务器删除并重建虚拟机恢复过程 HP EVA4400服务器RAID信息丢失数据恢复方法 Apache 工作模式的优化深入 部署PXE远程安装服务 并实现Kickstart无人值守安装

扫一扫,领取大礼包

0

分享

jeffz

转载于:https://blog.51cto.com/jeffz/59885

分清ASP.NET AJAX中的Extender和Behavior模型相关推荐

  1. 现存问题以及解决方案:在ASP.NET AJAX中从客户端向服务器端传送DataTable

    摘要 在<现存问题以及解决方案:在ASP.NET AJAX客户端得到服务器端的DataTable>这篇文章中,我给出了一个在ASP.NET AJAX中从服务器端得到客户端DataTable ...

  2. 深入剖析微软ASP.NET Ajax中的数据绑定构架下篇之二

    四.例2-数据库绑定 现在,我们来讨论更为复杂的数据库绑定的例子.根据我们前面的讨论,我们找到了使用DataSource的典型场所:在前面的例1中,我们使用了一种内存数据来模拟有状态的web服务.但是 ...

  3. 在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 身份认证与用户个性化等应用程序 ...

  4. 在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 在内建了身份认证应用程序服务之 ...

  5. 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 让我们通过编写一个完整的示例程 ...

  6. 在ASP.NET Core中使用的ML.NET模型构建器入门

    目录 介绍 背景 先决条件 使用代码 第1步-创建ASP.NET Core应用程序 步骤2:使用ML.NET Model Builder 数据 训练 评估 代码 步骤3:将ML.NET添加到ASP.N ...

  7. 精化集ASP.NET AJAX与ASP.NET MVC分类第二轮筛选结果

    以下是包同学导给我的清单.老赵的第二轮把关很严,杀了几乎99%的文章.不过似乎有少部分并没有经过我的手,可能是其他同学转过来的吧.第三轮老赵依旧会严格把关,肯定也会杀更多(包括通过其他同学第二轮的)文 ...

  8. 拥抱变化——从Atlas到ASP.NET AJAX(4):大大简化的了的Extender扩展器控件

    阅读本文之前,您需要安装完成Microsoft ASP.NET AJAX v1.0 Beta(详见拥抱变化--从Atlas到ASP.NET AJAX(1):下载安装总览).安装完成之后,Visual ...

  9. SharePoint 2010中的客户端AJAX应用——ASP.NET AJAX模板

    WCF Data Services是SharePoint 2010中一个极具吸引力的新特性.然而,因为它的强大,直接对其进行编程仍然会有点痛苦.幸运的是,一个新的相关技术 -- ASP.Net AJA ...

最新文章

  1. 关于VC向导生成的COM的注册与反注册
  2. 【数字信号处理】傅里叶变换性质 ( 频域函数的共轭对称分解 | 序列的傅里叶变换 | 傅里叶变换的共轭对称 | 傅里叶变换的共轭反对称 )
  3. 碰到问题集锦(简述)1
  4. 11个显著提升 ASP.NET 应用程序性能的技巧——第1部分
  5. 无监督学习:从基本概念到四种实现模型
  6. php随机数字不重复使等式成立_当随机数遇上量子
  7. 如何使用SAP Intelligent Robotic Process Automation自动操作Excel
  8. linux 驱动日志,Linux上的自由空间驱动的日志轮换?
  9. HMC支持管理服务器数量及适合POWER6服务器的HMC型号
  10. Eclipse+CDT+MinGW 配置 C/C++ 开发环境
  11. 文件服务器批量权限修改,服务器文件批量权限设置权限
  12. Leetcode1278
  13. 关于虚拟机的十个基本小技巧
  14. 记录 Spring Cloud GateWay 使用 路径与路由名字重复 出现的问题
  15. DBA生涯之如何成为高级DBA
  16. 原生JS实现marquee 滚动字幕效果,完美解决频闪问题
  17. 【中文】【吴恩达课后编程作业】Course 4 - 卷积神经网络 - 第二周作业
  18. parseFloat() 小数点后不为0,就保留2位。否则为整数
  19. 同步(Synchronous)和异步(Asynchronous)
  20. 统计学知识整理—正态分布

热门文章

  1. python机器交易_[原创]Python 机器学习之 SVM 预测买卖 -- 基于 BotVS 量化平台
  2. shell if 命令
  3. Android应用程序------精算达人
  4. 计算机科学与技术学费贵吗,在职计算机科学与技术研究生学费贵吗?
  5. 算法:求五子棋盘是否有获胜方
  6. Jenkins Build Goals and options vars
  7. 【Unity3D】美术字制作字体用于UGUI、NGUI
  8. windows必备软件神器
  9. 千千静听与win7 冲突
  10. python控制本地音乐播放_Python:当音乐播放时,如何使语音控制工作?