首页 > 编程语言 >ASP.NET AJAX使用方法概述(三)

ASP.NET AJAX使用方法概述(三)

时间:2023-02-27 14:05:56浏览次数:33  
标签:控件 ASP 服务器端 AJAX NET 客户端


2.5 ASP.NET AJAX使用方法概述

完成了上述配置之后,我们就可以立刻开始一次令人激动的ASP.NET AJAX之旅了!不过无论在开始什么样的旅行之前,我们都应该选择好最佳的路线。在上面的介绍中,我们知道ASP.NET AJAX分为服务器端和客户端两个部分,其中很多功能既可以完全使用客户端功能实现,也可以完全使用服务器端功能实现。那么这两种方法有什么不同?针对实际开发中遇到的种种不同的情况,我们应该如何选择最合适的方法呢?

2.5.1 服务器端和客户端使用方法的比较

首先,我们比较一下这两种开发方式的优劣,见表2-1。

表2-1 ASP.NET AJAX服务器端和客户端实现方式比较

比较内容

服务器端实现

客户端实现

性能

功能

较弱

强大

开发难度

跨平台(服务器端)

不支持

完全支持

从表2-1中可以看到,ASP.NET AJAX服务器端和客户端实现方式主要有如下4点显著差异:

(1) 性能:由于Ajax应用程序将在客户端运行,所以无论是服务器端实现方式还是客户端实现方式,最终都将生成JavaScript代码并在客户端浏览器中运行。然而,在服务器端实现方式中,服务器端控件将在运行时生成JavaScript代码并发送至客户端,这样就加重了服务器端的负担,也造成了程序运行效率的下降。

(2) 功能:ASP.NET AJAX所提供的服务器端控件并不是很多,其功能也不够丰富(但是作为服务器端控件扩展包的ASP.NET AJAX Control Toolkit,已经大大丰富了现有的ASP.NET AJAX服务器端控件,并且还在迅速发展中)。而ASP.NET AJAX的客户端控件则已经具备了一个较为完整的架构以及非常完善的功能,甚至可以和ASP.NET 2.0内建的服务器端控件框架相媲美。

(3) 开发难度:ASP.NET AJAX服务器端实现方式的编程模型和ASP.NET几乎完全一致。若熟悉ASP.NET开发,则将很快上手,并可充分借助Visual Studio提供的强大的功能(如编译期检查、智能感知等)提高开发效率,并且这种编程模型几乎不需要开发者具备任何的JavaScript(甚至Ajax)知识。而客户端实现方式则与传统的ASP.NET编程模型大相径庭,你不得不放弃现有的ASP.NET知识以及开发流程,而去接受并学习一种新的开发模型——ASP.NET AJAX XML脚本,并忍受客户端开发的种种不便。特别令开发者感到困难的是,当前甚至还没有任何一个IDE可以较为完美地支持JavaScript的开发/调试工作。

(4) 服务器端跨平台能力:由于ASP.NET AJAX的服务器端控件是基于ASP.NET 2.0开发的,所以这些控件也只能在ASP.NET 2.0框架的服务器端运行。自然地,对于非ASP.NET 2.0平台,我们将无法使用ASP.NET AJAX的服务器端功能。但因为ASP.NET AJAX客户端功能均由标准的JavaScript实现,与服务器端开发平台无关,所以我们可以在非ASP.NET 2.0服务器端实现,例如PHP页面中手工添加ASP.NET AJAX客户端脚本库的引用,进而使用其完整的客户端功能。

2.5.2 选择最适合的使用方法

这样,对于开发中遇到的不同情况以及不同需求,我们应该区别对待并选择合适的手工开发方式。下面是几个常见的场景。

(1) 为现有的ASP.NET 2.0应用程序增加部分Ajax功能:这种情况常常发生于我们已经拥有了一个带有完整功能的传统ASP.NET 2.0应用程序,但需要为其中的某些界面元素添加一些Ajax功能时。例如,为某个文本框添加自动完成功能,为某个页面中经常要变化的控件(例如,某个提供分页、排序功能的GridView)添加局部更新功能等。由于ASP.NET AJAX的客户端实现方式与现有的ASP.NET编程模型格格不入,且我们又不希望完全重写已经具有完备功能的现有程序,所以这时就应该选择服务器端实现方式。ASP.NET AJAX的服务器端实现方式也似乎正是为这种情况所设计的。你甚至不用修改一行现有的代码,只需在页面中添加一个新的ASP.NET AJAX服务器端扩展器控件,然后将其指向页面中某个现有的ASP.NET服务器端控件,即可为其添加丰富的客户端功能。或者,你可以使用ASP.NET AJAX的服务器端UpdatePanel控件将现有页面的某一部分包围起来,这样,这部分页面即自动拥有了Web应用程序梦寐以求的Ajax方式的局部更新功能!这些内容将在接下来几章中详细介绍。

(2) 从头创建“纯粹的”Ajax应用程序:所谓“纯粹的”Ajax应用程序,指的是服务器端没有任何表示层逻辑,而只用来提供数据,同时所有的表示层逻辑均在客户端JavaScript中完成的Web应用程序。极端一点说,这种“纯粹的”Ajax应用程序将只有一个页面,所有的功能(包括用户输入、与服务器通信、界面改变等)均通过客户端JavaScript来实现,例如Windows Live Mail。这无疑是对我们熟悉的ASP.NET应用程序开发模型的彻底颠覆!然而,它却能够带来非常优越的服务器端性能,以及前所未有的无比清晰的程序架构。对于这种需求,我们则显然必须使用ASP.NET AJAX的客户端实现方式。这种方式将让你能够对应用程序的任何一个微小的细节进行非常精确且高效的控制。这些内容将在本书第Ⅱ卷中详细介绍。

(3) 在非ASP.NET 2.0服务器端平台上使用ASP.NET AJAX:这种情况下的ASP.NET AJAX服务器端实现将鞭长莫及,我们只能考虑使用ASP.NET AJAX的客户端实现方式。但即使没有了ASP.NET AJAX服务器端的协助,ASP.NET AJAX客户端功能的光芒仍旧无法遮挡,极为引人注目。

相信通过这些分析,你已经可以找到这次ASP.NET AJAX之旅的最佳路线了。但需要注意的是,ASP.NET AJAX的两种实现方式并不是互相对立的,而是相辅相成的。上面所说的“选择某种实现方式”仅仅意味着“偏重使用某种实现方式”。例如,对于ASP.NET 2.0下纯粹使用客户端实现方式的ASP.NET AJAX开发,我们仍需要服务器端ScriptManager控件向浏览器发送ASP.NET AJAX客户端框架所必需的JavaScript文件。

标签:控件,ASP,服务器端,AJAX,NET,客户端
From: https://blog.51cto.com/u_15070324/6088385

相关文章

  • netapp fas2220更换硬盘的记录
    1、买来新的硬盘,出现broken的问题如下:fas2220>volstatus-rAggregateaggr0(online,raid_dp,reconstruct)(blockchecksums) Plex/aggr0/plex0(online,normal,......
  • net6项目遇到的一些问题
    1添加redis时,在控制台程序可以运行,而在webapi无法运行,同样代码在家里电脑可以可能是网络设置的问题2获取appsetting的值2.1 builder.Configuration["Redis:Host"];2.......
  • 记一次 .NET某家装ERP系统 内存暴涨分析
    一:背景1.讲故事前段时间微信上有一位老朋友找到我,说他的程序跑着跑着内存会突然爆高,有时候会下去,有什么会下不去,怀疑是不是某些情况下存在内存泄露,让我帮忙分析一下,其实......
  • .NET依赖注入之一个接口多个实现
    .NET依赖注入之一个接口多个实现 前言最近又在项目中碰到需要将原本单实现的接口改造成多个实现的场景,这里记录一下常见的几种改法。假设已经存在如下接口ICustomSe......
  • 我做的百度飞桨PaddleOCR .NET调用库
    我做的百度飞桨PaddleOCR.NET调用库 我做的百度飞桨PaddleOCR.NET调用库.NETConf2021中国我做了一次《.NET玩转计算机视觉OpenCV》的分享,其中提到了一个效果特别......
  • 如何将 Autofac 整合进 Net6.0 Core MVC 项目中
    一、前言1、前言Asp.NetCoreMvc,我也用了很长一段时间了,它现在的编程模型和方式还是特别棒的,都是组件开发,什么都可以替换,当然了,您别抬杠,有些还是......
  • Winform C# .Net中给ListBox加ToolTip提示
    1、首先,在工具箱中将ToolTip控件拖入到Winform界面下方。2、接着,在指定的ListBox添加:XXX_MouseMove事件(如已添加则忽略此步)。其中:XXX为您的控件名称。3、在该事件中添加如此......
  • C# .Net中鼠标Cursor的公用辅助类
    有时,我们需要将背景透明的png或gif格式图片生成的Cursor,甚至将其旋转后生成旋转效果的Cursor(可指定热点)。直接上源码:usingSystem;usingSystem.IO;usingSystem.Reflecti......
  • C# .net中B样条曲线转贝塞尔曲线
    PointF[]Spline2Bezier(PointF[]points,intstart,intnum,boolclosed,floattension)privatestaticPointF[]Spline2Bezier(PointF[]points,intstart,intnum......
  • 从.net Framework4.6WPF升级到.netcore3.1/net5/6/7.0版本
    因项目需要,需将.netFramework4.6WPF升级到.netcore3.1/net5.0/6.0/7.0版本,通过很多办法解决,开始搞得一头雾水。终于,找到了办法。1、首先下载upgrade-assistant工具(.net升级......