①必须在ScriptManager控件下添加对必要的.asmx及.js文件的参考;
②我们定义了若干span和div HTML元素以作为MS AJAX客户端控件—ListView的占位符。如前所述,ListView提供有好几个有用的模板—layoutTemplate,itemTemplate,separatorTemplate,emptyTemplate,和一个必要的属性—itemTemplateParentElementId(指定temTemplate和separatorTemplate的父元素;通过这种方式,该itemTemplate和separatorTemplate相关联的元素都可以在其中反复生成);
③接下来,我们进行了声明性编程(在下篇中再详细讨论它)。为了实现把从web服务端返回的数据显示于ListView控件中,我们必须使用DataSource控件来指定这个服务的URL;
④我们定义了一个ListView框架,相应的模板对应于它们各自的HTML对应元素;
⑤在步骤④中,我们还建立了对web服务内的属性的绑定;
⑥最后,细心的读者应该还会注意到,我们在此使用声明性方式来调用按钮的点击事件处理器,它又进一步调用DataSource控件BooksDataSource的load方法。
2、创建一个Web服务
接下来,我们将使用声明性方式写一个web服务以便从浏览器端消费它。在本例中,我们让该服务返回一个Book对象数组。
右击工程并选择“添加新项”,然后创建一个新的Web服务,并命名为为BookDataService.asmx。然后,在文件BookDataService.cs中,我们要编写我们的WebMethod—GetTitles。下面的列表5展示了其中重要的代码片断:
列表5
using System.Collections.Generic; using System.ComponentModel; ………… using System.Data; using System.Web.Script.Services; using Microsoft.Web.Preview.Services; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class BookDataService : DataService {
public BookDataService() { //InitializeComponent(); } [DataObjectMethod(DataObjectMethodType.Select)] public Book[] GetTitles() { List return _data.ToArray(); } public class Book { private string _title; public Book(){} [DataObjectField(true)] public string Title { get { return _title; } set { _title = value; } } public Book(string title) { _title = title; } } } |
在此,有几点需要强调一下:
①根据有关资料,我们必须把属性ScriptService置于这个Web服务之前,这样才会使MS AJAX框架能够从客户端对它进行调用; ②我们令这个web服务派生自一个有些特殊的WebService—DataService,我们将在下篇中来讨论它; ③还要注意方法GetTitles前面使用一个特别的属性DataObjectMethod(定义于命名空间System.ComponentModel中)进行了修饰。这个属性含有两个参数—第一个是DataObjectMethodType,允许你指出是否此方法用于删除,插入,选择,填充或更新一个项;第二个属性(一个boolean值)用于指示是否某个方法是相应于它的操作类型的缺省方法。 ④在此,还出现了另一个属性—DataObjectField。这个属性使用了三个参数以允许你指定:是否该属性是一个主键和一个自动增量值,它的字节长度,以及是否它可以为空。
现在,我们已经明确WebMethodGetTitles将返回一个Book对象数组。
3、消费Web服务
事实上,这项任务已经实现了。真的吗?是的。因为根据我们在前面对控件DataSource的load方法的解释,当你点击按钮“Get Book by Title”时,数据源BooksDataSource的方法load即被调用,然后,借助于修饰符[DataObjectMethod(DataObjectMethodType.Select)],WebMethod GetTitles被调用。最后,ListView Books被使用从WebMethod GetTitles返回的数据加以填充。
4、运行示例
如果没有什么问题的话,按F5并启动这个示例。然后,点击按钮“Get Book By Title”,你将看到如图6所示的运行时刻屏幕快照。
广州网站建设,网站建设,广州网页设计,广州网站设计
![]() |
图6:示例程序运行时刻快照 |
【重要提示】为了正确运行这个示例,你还必须在配置文件web.config内添加下列转换器。
列表 6
至此,我们已经匆忙地介绍完一个简单的示例!
五、总结
在这个上篇中,我们首先概括介绍了MS AJAX框架中的数据绑定架构,然后我们较细致了分析了主要的用于实现的的客户端控件及其相互间的关系。最后,我们通过一个简单的示例给出MS AJAX框架中的数据绑定架构在实践的应用。在下篇中,我们将进一步分析两个更为复杂的示例以进一步挖掘MS AJAX客户端数据绑定所蕴含的思想。