基于微软ASP.NET AJAX框架开发幻灯片播放网页

简介:
一、 简介 
    最近,微软ASP.NET Ajax 1.0框架以其完整的基于Ajax的web开发方案呈现在web技术人员的前面,凭借与遗留ASP.NET系统的有机整合以及完全面向对象的客户端JavaScript组件模型两大绝杀正在引起越来越多的基于.NET平台的web开发者的关注。本文应该属于这个框架的基础篇,我想通过一个具体的例子(播放web幻灯片)来向读者展示如何使用该框架提供的面向对象的客户端JavaScript组件模型来进行常规的WEB开发。

    在公司网站中,我们经常需要一个基于Web幻灯片形式的机制来演示自己的(也可能是别人的)产品。当然,你可以使用普通的JavaScript来开发这样的幻灯片;但是,借助于ASP.NET AJAX框架,这一开发工作将得到极大简化。在本文示例中,我们正是想将借助于Web页面方法和客户端脚本扩展技术开发这样一个简单的幻灯片。终端用户可以播放和暂停幻灯片,也可以进行循环播放,还可以手工控制(导航)。
二、 创建一个ASP.NET AJAX-Enabled网站 
    
    启动Visual Studio 2005,然后选择菜单项“文件|新建网站…”,使用模板“ASP.NET AJAX-Enabled网站”创建一个新的网站,并命名工程为SlideShow(选择Visual C#作为内置语言)。此后,系统应该自动地添加对必要的程序集—System.Web.Extension.dll的参考。此外,你会注意到一个ScriptManager服务器控件自动地添加到页面中。注意,这个服务器控件作为整个ASP.NET AJAX框架的控制中心。

    然后,添加一个具有两行和一列的HTML表格,再在第一行添加一个<img>标签,在第二行添加六个HTML按钮控件。下图1展示web表单Default.aspx的大致布局。 
    

    图1—示例程序设计时刻快照。 
三、 创建SlideShow类 
    右单击工程添加一个新的java脚本文件,并命名为JScript.js。在此,我们将创建一个称为SlideShow的类,它将负责完成所有的幻灯片操作任务—例如播放、暂住和导航幻灯片。注意,这个SlideShow类的开发是基于ASP.NET AJAX客户端脚本扩展技术,具体实现代码如下所示: 

  
  
Type.registerNamespace( " Demo " ); // 构造函数及私有变量声明 Demo.SlideShow = function(){ this ._slides = new Array(); this ._delay = 2000 ; this ._currentIndex = 0 ; this ._pause = false ; } // 原型定义部分 Demo.SlideShow.prototype = { get_Slides:function() { return this ._slides; }, set_Slides:function(value) { this ._slides = value; }, get_Delay:function() { return this ._delay; }, set_Delay:function(value) { this ._delay = value; }, get_CurrentIndex:function() { return this ._currentIndex; }, set_CurrentIndex:function(value) { if (value < 0 ) { this ._currentIndex = this ._slides.length - 1 ; return ; } if (value >= this ._slides.length) { this ._currentIndex = 0 ; } else { this ._currentIndex = value; } }, get_IsPaused:function() { return this ._pause; }, set_IsPaused:function(value) { this .pause = value; }, Pause:function() { this ._pause = true ; }, Play:function() { this ._pause = false ; window.setTimeout( " slideshow.ShowImage() " this .get_Delay()); }, ShowFirst:function() { this ._currentIndex = 0 ; this .ShowImage(); }, ShowLast:function() { this ._currentIndex = this ._slides.length - 1 ; this .ShowImage(); }, ShowNext:function() { var newIndex = this ._currentIndex + 1 ; this .set_CurrentIndex(newIndex); this .ShowImage(); }, ShowPrevious:function() { var newIndex = this ._currentIndex - 1 ; this .set_CurrentIndex(newIndex); this .ShowImage(); }, ShowImage:function() { var img = $ get ( " Image1 " ); if (img.style.visibility == " hidden " ) { img.style.visibility = " visible " ; } var slides = this .get_Slides(); var curIndex = this .get_CurrentIndex(); img.src = slides[curIndex]; if ( this .get_IsPaused() == false ) { this .set_CurrentIndex(curIndex + 1 ); this .Play(); } } } // 注册类 Demo.SlideShow.registerClass( " Demo.SlideShow " ); // 创建全局SlideShow类的实例 var slideshow = new Demo.SlideShow();


    在代码的最开始,我们先注册一个称为Demo的新的命名空间。然后,创建一个称为SlideShow的类。该SlideShow类的构造器共声明了四个私有成员变量。其中,_slides变量指向一个包含幻灯片图像URL的数组;_delay变量指示两张相邻的幻灯片播放的间隔时间(单位为毫秒);_currentIndex变量存储了当前幻灯片在_slides数组中的索引值;最后,_pause变量指示幻灯片被暂停(true)还是处于运行态(false)。 

    接下来,在SlideShow类的原型中,我们定义了与前面的四个属性相关联的getter/setter方法,也就是Slides、Delay、CurrentIndex和IsPaused。其它方法都比较基本,因此我们仅介绍方法set_CurrentIndex()。这个set_CurrentIndex()属性方法负责检查提供给它的索引值。如果该值超出slides数组上下标边界,那么,它会把这个值调整到0或数组的长度减1(根据具体情况而定)。这是很关键的,这样以来,幻灯片就可以进行循环播放。 

    接下来,Pause()方法简单地把成员变量_pause设置为true—这可以控制幻灯片如何暂停。 
Play()方法负责播放幻灯片。它首先设置_pause变量为false,然后调用JavaScript对象windows的setTimeout()方法。该setTimeout()方法接受两个参数:在经过特定时间延迟后要执行的代码;在此代码执行完后对应的时间跨度(单位为毫秒)。在本例中,这个延迟值来自于get_Delay()属性。在此,该setTimeout()方法将调用ShowImage()方法。 

    ShowImage()方法负责执行显示一个图像的核心工作。它引用了CurrentIndex和Slides两个属性,然后把图像标签的src属性设置为Slides数组中对应的适当的图像。注意,Image1是一个图像标签的ID—我们将在后面添加它。此外,还应注意$get()方法的用法,它等价于document.getElementById()方法。然后,CurrentIndex的值加1并且再次调用Play()方法。这样以来,将形成一个无限循环,而幻灯片将持续不断地播放下去。 

最后的四个方法—ShowFirst(),ShowLast(),ShowNext()和ShowPrevious()方法只是简单地调整_currentIndex成员变量的值,并调用ShowImage()方法来显示一张幻灯片。 

    在创建类结束后,我们使用registerClass()方法把它注册到MS AJAX框架。最后,声明一个SlideShow类的全局实例变量。 
最后打开Web页面Default.aspx,选择ScriptManager控件,并且设置它的EnablePageMethods属性为true,而且还要把JScript.js文件添加到它的脚本集合中。
四、 创建一个返回图像URL的web方法 
    我们前面创建的SlideShow类允许你使用Slides属性来指定幻灯片。一种使用Slides属性的方法是创建一个图像URL的常量数组。然而,更为适当的方法则是从服务器端得到图像URL。通过这种方式,你可以基于一些条件或甚至一种数据库驱动的逻辑返回图像。这需要我们创建一个能够返回一个图像URL数组的web方法。然后,从客户端JavaScript脚本中调用这个web方法。 
接下来,让我们开始创建下列web方法。

  
  
[WebMethod] public static string [] GetSlides(){ string [] slides = new string [ 4 ]; slides[ 0 ] = " images/slide1.jpg " ; slides[ 1 ] = " images/slide2.jpg " ; slides[ 2 ] = " images/slide3.jpg " ; slides[ 3 ] = " images/slide4.jpg " ; return slides;


    注意,这个GetSlides()是一个静态方法,并且被标记有[WebMethod]属性。它返回一个包含图像URL的字符串数组。在这个示例中,我们对图像URL进行了硬编码,但是你可以很容易地把它修改为使用数据库或任何其它方式来存储图像数据。 
五、 从JavaScript脚本中调用GetSlides() web方法 
    现在,既然我们已经准备好GetSlides() Web方法,那么接下来,我们需要从客户端JavaScript脚本中调用它。现在,切换到Web页面的HTML源视图并且在web表单的<HEAD>节中添加下列<script>块: 

  
  
< script type = " text/javascript " > function pageLoad(){ var img = $ get ( " Image1 " ); img.style.visibility = " hidden " ; PageMethods.GetSlides(OnSuccess,OnError,OnTimeOut); } function OnSuccess(result){ slideshow.set_Slides(result); slideshow.set_Delay( 2000 ); slideshow.Play(); } function OnError(result){ alert(result.get_message()); } function OnTimeOut(result){ alert(result); } </ script >


任何时候当一个web表单加载到客户端时,该<script>块包含的pageLoad()函数将被AJAX框架自动调用。它非常类似于ASP.NET的服务器端Page_Load事件。在这个pageLoad()方法中,我们用于实现暂时的图像隐藏。这样做的目的是为了避免浏览器显示不连续的图像标识。然后,借助于内置的类—PageMethods,pageLoad()函数调用GetSlides() web方法。在ASP.NET AJAX中,所有的执行都是异步的,因此,GetSlides()方法将接受一个回调函数—在成功时执行OnSuccess;出现错误时执行OnError;而在超时条件下则执行OnTimeOut。 
在此,OnSuccess()函数接受一个由GetSlides() web方法返回的字符串数组并且相应地设置SlideShow类的Slides属性。然后,它把幻灯片的延迟播放时间设置为2000毫秒。最后,它调用SlideShow类的Play()方法开发播放幻灯片。 
对于OnError()和OnTimeOut()方法,它们只用于简单地显示各自相应的错误消息。 
接下来,按如下所示修改HTML按钮控件标记: 
<input id="Button1" ... onclick="slideshow.ShowFirst()" /> 
<input id="Button2" ... onclick="slideshow.ShowPrevious()" /> 
<input id="Button5" ... onclick="slideshow.Pause()"/> 
<input id="Button6" ... onclick="slideshow.Play()"/> 
<input id="Button3" ... onclick="slideshow.ShowNext()" /> 
<input id="Button4" ... onclick="slideshow.ShowLast()"/> 
如你所见,这些按钮的 
好了,至此,整个示例编写结束!最后,按F5运行上面的web表单,你应该会看到我们的幻灯片在浏览器中开始播放了。 
六、 小结 
再次想说的是,本文中的例子仅展示了微软ASP.NET Ajax 1.0框架编程的非常基础的一面,如果你真对这个框架感兴趣,那么请抓紧动手试一下吧! 









本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/59353 ,如需转载请自行联系原作者

相关文章
|
1月前
|
设计模式 开发框架 JavaScript
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
159 3
|
1月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
32 4
|
1月前
|
机器学习/深度学习 人工智能 物联网
.NET 技术:引领未来开发潮流
.NET 技术以其跨平台兼容性、高效的开发体验、强大的性能表现和安全可靠的架构,成为引领未来开发潮流的重要力量。本文深入探讨了 .NET 的核心优势与特点,及其在企业级应用、移动开发、云计算、人工智能等领域的广泛应用,展示了其卓越的应用价值和未来发展前景。
60 5
|
1月前
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统
|
1月前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
42 1
|
2月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
3月前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
271 2
|
3月前
|
开发框架 .NET C#
VSCode开发.net项目时调试无效
【9月更文挑战第22天】在使用 VSCode 开发 .NET 项目时遇到调试问题,可从项目配置、调试配置、调试器安装、运行环境、日志和错误信息等方面排查。确认项目类型及文件配置,检查 `launch.json` 文件及配置项,确保调试器扩展已安装并启用,验证 .NET 运行时版本和环境变量,查看 VSCode 输出窗口和项目日志文件,检查权限及代码错误。若问题仍未解决,可查阅官方文档或社区论坛。