深入剖析微软ASP.NET Ajax中的数据绑定架构上篇之二
三、命名空间Sys.Preview.UI.Data中的客户端控件
|
属性名
|
描述
|
|
id
|
标识ItemView控件。
|
|
canMoveNext
|
如果还存在下一条记录,则为true;否则为false。
|
|
canMovePrevious
|
如果还存在前一条记录,则为true;否则为false。
|
|
data
|
存储所有的加载到当前ItemView控件中的Sys.Preview.Data.DataTable对象—这些DataTable对象都是通过DataSource控件从后台获取的。
|
|
dataIndex
|
标识当前记录的索引号。
|
|
dataItem
|
基于dataIndex返回当前记录。
|
|
length
|
返回的记录总数。
|
|
itemTemplate
|
这个模板用于渲染列表中的单个项(例如使用一个<tr>标签)。它必须位于layoutTemplate模板内。
|
|
EmptyTemplate
|
这个模板用于当数据源中没有数据项时(或该ItemView仍然等待来自于服务器端的数据时)生成一个空消息。
|
|
方法名
|
描述
|
|
addItem
|
把一个新项添加到客户端数据集合中,并且这个操作将使
dataset
变“脏”
|
|
deleteCurrentItem
|
从客户端数据集合中删除当前项,这个操作也将使
dataset
变“脏”
|
|
moveNext
|
移动到下一条记录,这个操作将再次触发定义于
ItemTemplate
中的控件的数据绑定
|
|
movePrevious
|
移动到前一条记录,这个操作也将再次触发定义于
ItemTemplate
中的控件的数据绑定
|
| 属性名 | 描述 |
| Id | 标识ListView控件。 |
| canMoveNext | 如果还存在下一条记录,则为true;否则为false。 |
| canMovePrevious | 如果还存在前一条记录,则为true;否则为false。 |
| data | 与ItemView控件一致 |
| dataIndex | 标识当前记录的索引值。 |
| dataItem | 基于dataIndex返回当前记录。 |
| length | 返回记录记录总数。 |
| alternatingItemCssClass | 指定可选项使用的css类。 |
| layoutTemplate | 这个模板用于生成列表容器(例如,使用一个<table>标签),头部(例如,使用一个<thead>标签)和页脚。你必须为一个ListView指定一个layoutTemplate。这个模板必须包含一个itemTemplate,也可以包含一个separatorTemplate。 |
| itemCssClass | 指定各项所使用的css类。 |
| itemTemplate | 这个模板用于生成列表中单个项(例如,使用一个<tr>标签)。它必须包含于layoutTemplate内。 |
| EmptyTemplate | 这个模板用于当数据源中没有数据项时(或该ListView仍然等待来自于服务器端的数据时)生成一个空消息。 |
| selectedItemCssClass | 指定选择项。 |
| seperatorCssClass | 指定项分隔符对应的css类。 |
| seperatorTemplate | 这个模板用于生成列表中相邻两项间的一个分隔符(例如,使用一个<hr>标签)。它必须包含于layoutTemplate内。 |
| itemTemplateParentElementID | 这个属性用于定义itemTemplate和separatorTemplate的父元素。这样以来,记录项和分隔符即可反复出现于这个元素中(例如,使用一个<tbody>标签)。 |
![]() |
| 图5:设计时刻的示例web页面 |
<head runat="server"> <script type="text/xml-script"> |
PRE>< P>< asp:ScriptReference>在此,有几点需要强调一下:
②我们定义了若干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方法。
|
using System.Collections.Generic;
using System.ComponentModel; ………… using System.Data; using System.Web.Script.Services; using Microsoft.Web.Preview.Services;
[WebService(Namespace = "
[url]http://tempuri.org/[/url]")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class BookDataService : DataService {
public BookDataService()
{ //InitializeComponent(); } [DataObjectMethod(DataObjectMethodType.Select)] public Book[] GetTitles() { List _data = new List(); _data.Add(new Book("Hello,this is Title 1")); _data.Add(new Book("Hello,this is Title 2")); _data.Add(new Book("Hello,this is Title 3")); _data.Add(new Book("Hello,this is Title 4"));
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; } } } |
②我们令这个web服务派生自一个有些特殊的WebService—DataService,我们将在下篇中来讨论它;
③ 还要注意方法GetTitles前面使用一个特别的属性DataObjectMethod(定义于命名空间System.ComponentModel 中)进行了修饰。这个属性含有两个参数—第一个是DataObjectMethodType,允许你指出是否此方法用于删除,插入,选择,填充或更新一个 项;第二个属性(一个boolean值)用于指示是否某个方法是相应于它的操作类型的缺省方法。
④在此,还出现了另一个属性—DataObjectField。这个属性使用了三个参数以允许你指定:是否该属性是一个主键和一个自动增量值,它的字节长度,以及是否它可以为空。
![]() |
| 图6:示例程序运行时刻快照 |


