职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1132|回复: 0

ASP.NET+Atlas创建客户端Web应用程序

[复制链接]
joe 发表于 2007-2-8 19:18 | 显示全部楼层 |阅读模式
  提要 本文介绍了Atlas框架,并探讨它的客户端和服务器端类库及其编程模型。另外,本文还详细剖析了一个支持Atlas功能的示例Web应用程序。
  一、 开发环境说明
  本文中所提供的信息适用于下列技术:Asp.net 2.0,Asp.net Atlas CTP,Visual Studio Professional 2005和Visual Web Developer 2005。
  二、 简介
  Atlas是一个框架的代号,该框架对于客户端Web应用程序的开发方面扩展了asp.net。该框架在提供一组客户端和服务器端类来创建跨浏览器兼容的AJAX风格的应用程序的同时,还引入了其它特征,例如桥接技术,gadget,一个JavaScript的声明性脚本模型和扩展。
  本文将介绍Atlas框架并探讨它的客户端和服务器端类库及其编程模型。另外,本文还详细剖析了一个支持Atlas功能的示例Web应用程序。
  三、 基于客户端和服务器端的Web应用程序

  现在,Web应用程序开发主要针对于http客户端(浏览器)和服务器开发。Asp.net Web应用程序是基于服务器的(在该主机上运行),因此,对于由在客户端上的一个服务器控件激发的每一个事件都要求一个完整的回寄。这样的情形可以用图1所示来描述。

图1.一个针对asp.net Web应用程序的http回馈
  只在服务器端运行Web应用程序,而几乎不需要(或很少需要)客户端处理,并且不会造成性能下降。不过,其缺点也很容易在一个asp.net Web应用程序发现:一个闪烁的、暂停的、不具有响应性的和相对可怜的UI;或者是,由于数据回寄和服务器过载而导致一个繁忙的线路。
  要在asp.net应用程序解决这些性能障碍意味着,必须把一些加载处理移到客户端并且利用客户端平台所提供的技术。客户端平台是可以通过脚本进行编程的,而JavaScript就是适合于这种任务的一种标准的面向对象的编程语言。
  那么,上面这些客户端平台技术指的是什么呢?这些客户端平台(浏览器)提供了下列技术:
  · 文档对象模型:一种标准化的语言独立的一组对象集合,允许开发者动态地控制HTML文档的结构、内容和风格。
  · 动态的超文本标记语言对象模型:一个浏览器供应商特定的特征集合,可以用作DOM的一个扩展。数据绑定、UI效果(例如过滤器和过渡)、HTML元素行为和事件都是在这个对象模型内部所提供的一些特征。
  · XmlHttpRequest对象:它允许通过Http检索和提交XML数据而不要求一种整个Web文档的完整的回馈或重新生成。
  · 一个JavaScript解释器:包含在所有的Web浏览器中,由它处理用JavaScript书写的命令。JScript是微软版本的JavaScript,它最初由Netscape所创建。两种版本都遵循ECMAScript标准—供应商中立的,跨平台的,通用目的的脚本语言。
  这些技术合在一起被称为AJAX,代表的意思是异步JavaScript+XML;而Atlas正是一种利用这些技术的创建Web应用程序的框架。下面的图2展示了一个支持Atlas技术的asp.net Web应用程序。

图2.Http请求和响应一个支持Atlas技术的,基于客户端的asp.net Web应用程序
  四、 Atlas框架概要
  该框架包含了Microsoft.Web.Atlas.dll装配集,它包含了服务器端托管的和客户端JavaScript API。
下图3展示了Visual Studio的对象浏览器窗口中的Atlas命名空间。

图3.在Microsoft.Web.Atlas.dll装配集中的命名空间
  (一) 服务器端库
  在图3框架中展示的命名空间中提供的各种类担任服务器端库。该库提供与客户端JavaScript API一起工作的配置、Web服务和控件类。
  该Web服务类把asp.net特征,例如认证、轮廓、文化和全球化等信息,暴露给客户端JavaScript代码以便进行异步存取。另一方面,Atlas服务器控件类,在生成这些控件时能够“发出”JavaScript,从而使开发者免于编写复杂的客户端脚本。
  服务器端库还提供Atlas extender控件,它能够提供给asp.net控件其它客户端功能。
  下列控件是服务器端库的一部分:
  · ScriptManager控件:提供了在一个Web页面上的所有的Atlas特征,例如部分页面更新,定制和库客户端脚本参考和生成,针对客户端异步存取的Web服务引用,而异常处理是由该控件管理的。每一个需要实现Atlas功能的asp.net Web页面或用户控件都需要声明这个控件的单个实例。为了在一个页面上使用ScriptManager控件,你可以使用下列声明性语法:
<atlas:ScriptManager
ID=\"ScriptManager instance identifier\"
<!--enables or disables partial page rendering using UpdatePanel controls-->
EnablePartialRendering=\"boolean true or false\"
<!--If set to false the AtlasRuntime.js file, which provides basic \'Atlas functionality is referenced by default.
If set to true the Atlas.js file, which provides the entire Atlas feature set is referenced by default.
The default value is true-->
EnableScriptComponents=\"boolean true or false\"
OnPageError=\"invoked event handler on PageError \"
runat=\"server\" >
<Scripts>
<atlas:ScriptReference
<!--to reference custom script files-->
Path=\"path to .js file\"
<!--to reference client library files that are not included automatically-->
ScriptName=\"name of script file e.g. AtlasUIGlitz\"/>
</Scripts>
<Services>
<atlas:ServiceReference
<!--If set to true the control generates a JavaScript proxy object for asynchronous access for the referenced Web Service.
If set to false it doesn\'t.-->
GenerateProxy=\"boolean true or false\"
Path=\"path to a Web service (e.g. asmx) file\"
Type=\"Web service class name\"
/>
</Services>
<ErrorTemplate>
<!--Markup for rendering unhandled exception messages for asynchronous postback.
Partial rendering should be enabled. The template has to define an input button with an attributes ID of value \"okButton\" and runat of value \"server\" to close the message. -->
</ErrorTemplate>
</atlas:ScriptManager>
  · ScriptManagerProxy控件:对于内容页面和用户控件来说,如果它们的父页面已经拥有一个定义好的ScriptManager控件,那么这个控件可以用于参考其它脚本和服务。但是,该控件不能被ScriptManager控件用于删除脚本和服务参考。
  · UpdatePanel控件:当通过ScriptManager控件支持一个Web页面的部分生成时,UpdatePanel控件可以用于指定页面上的区域—能够被独立地使用异步回馈进行更新。下列声明性语法用于在一个Web页面中定义一个UpdatePanel控件:
<atlas:UpdatePanel
ID=\"UpdatePanel instance identifier\"
<!-- If Mode attribute is set to Always asynchronous postbacks triggered within the region update its contents automatically;
If it is set to Conditional the region is updated in response to a registered trigger -->
Mode=\"Always|Conditional\"
<!-- If RenderMode attribute is set to Block the content within the UpdatePanel is rendered using a <DIV> element;
If it is set to Inline a <SPAN> element is used as a container for the content within the UpadatePanel -->
RenderMode=\"Block|Inline\"
runat=\"server\">
<ContentTemplate>
<!-- Content to be rendered within the region-->
</ContentTemplate>
<!a
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-10 23:12 , Processed in 0.128983 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表