为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

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

2017-12-20 15页 doc 84KB 8阅读

用户头像

is_321635

暂无简介

举报
基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)(1)基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)(1) 基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)(1) 五、逻辑层设计 (一)添加RSS频道 在展开真正的逻辑层设计之前,先让我们简单地浏览一下下面的草图4。图4展示了我对于两个重要ASP.NET AJAX客户端控件—ListView和DataSource以及MS AJAX官方资料中建议的实现客户端数据绑定架构的理解。 从上图中,我们可以得出如下结论:在实战环境(本例中也是如此)下,当添加一个新的RSS频道时,我们并不需要立即把这些数据...
基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)(1)
基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)(1) 基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)(1) 五、逻辑层设计 (一)添加RSS频道 在展开真正的逻辑层设计之前,先让我们简单地浏览一下下面的草图4。图4展示了我对于两个重要ASP.NET AJAX客户端控件—ListView和DataSource以及MS AJAX官方资料中建议的实现客户端数据绑定架构的理解。 从上图中,我们可以得出如下结论:在实战环境(本例中也是如此)下,当添加一个新的RSS频道时,我们并不需要立即把这些数据存储到服务器端的SQL Server数据库中,而是暂时存储到与客户端控件ListView相关联的数据源控件中。因此,你可以已经猜出,该DataSource控件是支持批更新操作的—支持对于客户端修改数据的临时存储并最终以批处理方式实现更新服务器端数据库。上面草图中的两个重要方法—“Save”和“Load”在此实现逻辑中起着重要作用。 在这一节中,我们仅需要在客户端临时存储用户新输入的RSS频道信息。在此,我在操作ListView控件的过程中遇到了第一个难。下面先让我们来看一下相应的源码。 列表1 在此,我们首先指定DataSource控件“RSSInfoDataSource”。这个控件将被ASP.NET AJAX框架以异步方式绑定到服务器端DataService“MyDataService”。其次,在最后面的节中,当该Web应用程序启动时,它相应的load事件方法被调用。然后,在子节中,数据源“RSSInfoDataSource”的load方法被调用,这将触发一次异步回寄—调用数据服务“MyDataService”的Web方法GetAllRecords。下面的列表展示了这个方法的实现代码。 列表4 [WebMethod] [DataObjectMethod(DataObjectMethodType.Select)] public List GetAllRecords() { return new SqlTaskProvider().GetAllRecords(); } 有关于此方法之前的修改属性,在此不多赘述,请参考ASP.NET AJAX在线文档。现在,一旦这个方法执行结束,客户端ListView控件“RSSNameList”即被以存储于服务端SQL Server数据库表格RssStore中的记录所填写。 注意,在此我们略微施了点小技:为了取得较好的用户体验感,我们隐藏了两个字段Rss_ID和Rss_URL(这两个字段中的内容是不需要显示的)。下面给出的是相应的HTML代码片断。 列表5
不必我们担心,ASP.NET AJAX框架会自动区分这一情形,并仍然能够以数据库记录数据填充ListView控件,只不过是隐藏了其中两个字段的显示而已。 现在,让我们来分析第二种情形—当用户点击按钮“Refresh”时。尽管从字面上看,我们使用的是“Refresh”(即“刷新”),但是这个按钮的真正作用是把服务器端的数据库数据加载到当前ListView控件中。这一过程与客户端的数据控件DataSource存在着直接的联系。下面的xml-script代码向你展示了相应的编程。 列表6 从上面的代码可知,当用户点击按钮“Refresh”时,客户端DataSource控件“RSSInfoDataSource”的方法load被调用。然后,Web方法GetAllRecords将被异步调用;最后此Web方法返回的数据被填充到ListView控件中。 为了完整起见,在本示例程序中,我们还引入了一个“Save”按钮,其功能与按钮“Refresh”恰恰相反。当用户点击按钮“Save”时,所有位于ListView控件中的最新的RSS频道数据都将被以AJAX方式(即“异步”方式)永久性存储到服务器端的SQL Server数据库中。要想进一步探讨这个按钮的作用机制,请参考我发表在51CTO上的另一篇文章“”;在此文章中,我较为全面地分析了ASP.NET AJAX客户端ListView和ItemList控件等与以Web服务包装下的服务端SQL Server数据库的交互。 (三)显示指定RSS频道相应内容 现在,问题变得越来越有趣了。为了显示一个RSS频道的内容,为仅需要点击ListView控件中一项,然后让右边的Accordion控件展示相应的细节信息,不就行了,不错,但这仅是从用户角度得到的结论。但作为开发人员,为了解决这个问题,我花费了大量时间才找到一种实现。下面,让我来逐一向各位介绍。 通过网络取得RSS频道内容 1、关于ListView控件 有关ASP.NET AJAX框架提供的“高级”客户端ListView控件,我想先简单地讨论几句。从研究框架相应的源码文件PreviewScript.js,我们发现在这个控件的descriptor块定义(注:只在位于此块中的内容才可能在xml-script声明性编程方式中使用)中仅提供了极少数目的属性,方法与事件定义。下列我们干脆列出这个控件的descriptor块的定义。 列表7 Sys.Preview.UI.Data.ListView.descriptor = { properties: [ { name: 'alternatingItemCssClass', type: String }, { name: 'layoutTemplate', type: Sys.Preview.UI.ITemplate }, { name: 'itemCssClass', type: String }, { name: 'itemTemplate', type: Sys.Preview.UI.ITemplate }, { name: 'itemTemplateParentElementId', type: String }, { name: 'selectedItemCssClass', type: String }, { name: 'separatorCssClass', type: String }, { name: 'separatorTemplate', type: Sys.Preview.UI.ITemplate }, { name: 'emptyTemplate', type: Sys.Preview.UI.ITemplate } ], events: [ {name: 'renderComplete'} ] } 在上面的descriptor块定义中,仅有几个有限的属性和一个事件。后面我们将使用的方 法,还要求助于控件的父类DataControl。为此,为能够控制用户点击的ListView控件中的 每一项(对应一条记录数据),我们不得不进一步研究ListView控件定义中的prototype块, 并进而求助于JavaScript编程。 2、通过JavaScript编程为ListView添加事件 首先,让我们列出与上面所有相应的源码部分。 列表8