以服务器端为中心的ASP.NET AJAX模式 (Part 2

在上一篇文章当中,也就是《以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 - Behavior)》,我们探讨了较为易用的Behavior模式。之所以说它较为易用,是因为它 不涉及和原有Page处理流程的交互,即使访问网络也是访问独立的Web Service(包括Page上的[WebMethod]),因此和Page处理流程的设计绝对是正交的。但有时候我们需 要的就是与Page处理流程的交互,这时我们不得不使用与服务器端逻辑紧耦合的Control了,这正是本次文章要讨论的内容。

在基本的ASP.NET AJAX框架下,我们有 三种方法来做基于Control的Ajax操作,它们分别是UpdatePanel、ICallbackEventHandler和IScriptControl,下面我们就分别看看它们的特点和使用场景。

UpdatePanel

UpdatePanel是与服务器端逻辑进行交互的多种方案中最易用的一个,甚至就不能称之为交互——你根本就不需要触及任何客户端逻辑。 一个服务器端操作,经过UpdatePanel的“劫持”,变成了一个客户端操作,而这个客户端操作又直接调用对应的服务器端操作,就这么简单。

如果用 UpdatePanel来做一个带分支的选择对话框,那应该如何设计?思路可别跑到客户端的confirm方法上去,那可太绕了,或者说太不ASP.NET AJAX了。用UpdatePanel,就应该 坚持它的理念,一切客户端操作都是幻象,所有操作其实都是在服务器端进行的,包括选择对话框。要按ASP.NET的思路来做,我会做一个选择对话框控件,它的实质可能是 一个浮动层模拟的对话框,这属于实现细节,我们不用太关注。重点是,这个选择对话框的分支逻辑是完全在服务器端进行的,Async PostBack之后服务器端根据提交回来 的数据决定如何触发事件。这样做整个分支选择的逻辑就是内嵌在Page处理流程当中的,不需要通过Cookies或者Session来做数据的中转媒介,避免了Page处理流程与更大 作用域中的数据的紧耦合。

UpdatePanel适用于逻辑完全在服务器端的开发,并且我建议使用UpdatePanel时也就把所有逻辑放在服务器端,不要去写一些混合服务器 端逻辑与客户端逻辑的代码。有人会说,你看老赵就很喜欢去动那个Sys.Net.WebRequestExecutor来改变UpdatePanel的行为啊,但其实这属于分层设计思想中的一部分,他 去动那个东西改变的也就是一个分层内的逻辑,只要层与层之间的接口不变,具体实现是可以按需设计的。但如果你用了UpdatePanel,同时又用Cookies或者Session来传值 ,这就跨越了n个层,增加了不少耦合度。

ICallbackEventHandler

关于ICallbackEventHandler,我已经说过无数次了,重点还是你必须用Page处理流程来思考, 只要你理解了Page处理流程,你就明白为什么ICallbackEventHandler在.NET Framework 2.0 Beta2中只有一个方法,而到了RTM要分拆成两个方法。具体可以参考《ASP.NET 2.0 ClientScript Callback》,我就不再重复了。

如果用ICallbackEventHandler实现一个带分支的选择对话框,又如何做?和使用UpdatePanel的做法类似,我还 是会做一个选择对话框控件,并且这个控件继承自ICallbackEventHandler。为这个控件编写JavaScript并实现ICallbackEventHandler接口时,我会确保JavaScript对 Callback给出正确的调用参数,并在接口方法的实现中接收这些参数然后触发正确的事件,就这么简单。和UpdatePanel一样,不要偏离了ICallbackEventHandler的设计思 想,它的处理流程必须是合并到Page处理流程中的,你的控件也就必须这样设计。

至于在什么情况下选择ICallbackEventHandler?如果你有一个轻量级的Ajax操作 ,但使用UpdatePanel更新整个区域的HTML开销很大的话,那么你可以考虑使用ICallbackEventHandler。当然,前提是你懂得控件开发和JavaScript。

时间: 2024-08-21 16:15:53

以服务器端为中心的ASP.NET AJAX模式 (Part 2的相关文章

以服务器端为中心的ASP.NET AJAX模式 (Part 1

什么是Behavior? 什么是Behavior?Behavior与Control有什么不同?这是首先需要回答的问题. 在Windows开发当中,Behavior的概念是不存在的,有的只是Control.ASP开发连Control都没有的,到了ASP.NET才引入了Control的概念.为什么Ajax开发要引入 Behavior这样的概念呢?因为Behavior意味着不需要改变原有的组件逻辑,而改变原有组件的逻辑在客户端往往是不可行的,至少是难以实现的. 举个最简单的例子,一个<input ty

探讨微软ASP.NET AJAX控件开发技术(服务器端)

一.简介 到目前为止,我们已经讨论了开发Ajax控件所涉及的客户端相关技术.现在,让我们来讨论此过程中与服务器端相关的一些技术. 需要说明的是,在[客户端]篇中我们的举例本质上仅是使用ASP.NET AJAX框架提供的面向对象JavaScript技术来增强了一个客户端图像组件,而没有明显涉及到AJAX技术(除了ScriptManager在后台以AJAX方式下载并管理客户端脚本代码外).所以,这个例子是简单的,仅凭客户端相关知识就可以使用这个增强控件. 但是,在实际开发中,当要增强的客户端控件涉及

在ASP.NET AJAX中别使用mode=Legacy

ajax|asp.net 最近,我帮过几个开发人员,他们遇上了一些古怪的javascript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现.问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJA

在ASP.NET AJAX中别使用mode=&amp;quot;Legacy&amp;quot;

[导读]假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJAX的话,需要了解如何避免文中提到的这个常见的疑难杂症. 开发人员遇上了一些古怪的JavaScript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现. 问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本

ASP.NET AJAX客户端生命周期分析(理论篇)

一.引言 微软的ASP.NET AJAX框架,作为一个相对比较完善的AJAX框架,有许多方面值得我们作深入研究.本文中,我们将结合一个具体的例子试图探究ASP.NET AJAX框架的客户端生命周期过程. [注]阅读本文最好要结合"ASP.NET应用程序生命周期概述"和"ASP.NET页面生命周期概述"两篇文章共同学习. 二.ASP.NET AJAX客户端生命周期原理 因为ASP.NET AJAX框架在开发思路上极大地借鉴了ASP.NET 2.0的开发技术,而且将会被

基于ASP.NET AJAX技术开发在线RSS阅读器(上篇)

[注]本文测试环境:Windows XP专业版+Visual Studio 2005+整套ASP.NET AJAX框架+ASP.NET RSS Toolkit+SQL Server 2005. 一.RSS技术简介 RSS是一种描述和同步网站内容的XML格式,已经成为越来越流行的网站内容订阅技术.通过这种技术,网站可以极大地提高广大网站用户和网站数据之间的数据交互. RSS阅读软件可以分为桌面离线式和在线式两大类.有了这种工具,用户只需要添加初始其所关注的RSS网址,以后系统会自动更新相关内容,网

基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)

五.逻辑层设计 (一)添加RSS频道 在展开真正的逻辑层设计之前,先让我们简单地浏览一下下面的草图4.图4展示了我对于两个重要ASP.NET AJAX客户端控件-ListView和DataSource以及MS AJAX官方资料中建议的实现客户端数据绑定架构的理解. 开发在线RSS阅读器(下篇)-"> 图4:ASP.NET AJAX框架中建议的典型的客户端数据绑定架构 从上图中,我们可以得出如下结论:在实战环境(本例中也是如此)下,当添加一个新的RSS频道时,我们并不需要立即把这些数据存储到

探讨微软ASP.NET AJAX控件开发技术(客户端)

本系列文章将通过具体的实例从客户端和服务端两个角度全面探讨ASP.NET AJAX框架中的控件(Control)开发所涉及的技术. 一. 简介 如今,ASP.NET AJAX框架以其与ASP.NET 2.0系统的有机整合与完全面向对象的客户端JavaScript组件模型正在吸引着越来越多的Web开发人员.此外,这个框架还为基于ASP.NET 2.0平台的AJAX Web开发提供了一揽子方案(尽管尚嫌稚气). 首先,我们来回忆ASP.NET AJAX框架设计的主要目标:其一,扩展现有的ASP.NE

疑难杂症:在ASP.NET AJAX中别使用

ajax|asp.net 最近,我帮过几个开发人员,他们遇上了一些古怪的JavaScript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现.问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJA