如果熟悉经典ASP,即使函数不相同,那么你也会很熟悉ASP.NET中的数据绑定语法。数据绑定的表达式是ASPX文件中<%# and %>中间的代码。它允许将数据绑定到控制器,同时也允许绑定属性、表达式和页面上方法调用的结果绑定到控制器。虽然这一特征很容易使用,但是有时在确定什么内容被允许绑定和是否它已经被使用的时候又造成一定的混乱。
数据绑定要素
当页面的ASP.NET中DataBind方法被调用的时候,数据绑定表达式与ASP.NET中的属性、服务器控制属性和数据源进行链接。在打开服务器控制的标签或页面上任何地方的时候,可以将表达式放在属性值/数值对的数值这一边。所有的数据绑定表达式,不管放在什么地方,都包含在<%# and %>字符中。
使用数据控制器的时候(Repeater, DataGrid等等),表达式的参数一般是数据源的列名。无论如何,只要它返回一个值,任何有效的表达式都是可以使用的。同样,相同的语法也可用于外部列表控制。这包括在页面上显示值或组装控制器属性。
Container.DataItem是DataItem针对某一特定细目在运行时的别名。它从数据源映射一个单独的细目,例如从数据查询中得到一行或从一个向量中得到一个单独的元素等。DataItem的实际数据类型由数据源确定。因此,当处理一个整型向量时,DataItem也是整型的。
下面的列表回顾了一些VB.NET的语法情况:
<%# Container.DataItem %>--返回字符串向量
<%# Container.DataItem("expression") %>--返回DataView 容器中的某一特定字段
<%# Container.DataItem.PropertyName %>--返回数据源中特定字符串的属性值
<%# CStr(Container.DataItem.PropertyName) %>--返回属性值并转化成字符串形式
使用C#时,语法稍微有些不同。下面的列表包含了与上面列表相应的C#代码。注意,基本的语法是一致的,但是在返回属性值和数据类型的转换时有变化。
<%# Container.DataItem %>
<%# ((DataRowView)Container.DataItem)["PropertyName"] %>
<%# ((ObjectType)Container.DataItem).PropertyName %>
<%# ((ObjectType)Container.DataItem).PropertyName.ToString() %>
当对页面的属性和方法进行作用时,语法是相容的。只要是返回字符串值,语法则完全相同。下面的列表给出了示例:
<%# propertyName %>--返回页面水平属性值
<asp:ListBox id="lstValues" datasource='<%# propertyName %>' runat="server">--返回与数据控制器绑定的页面水平属性值(向量、对象集等)
<%# (objectName.PropertyName) %>--显示页面水平对象属性值
<%# MethodName() %>--显示页面方法返回的值
使用下面的语法可以使用页面上的单个值(属性和方法返回的值等等)
<%= Value %>
Listing A中C#代码说明了在ASP.NET Web表格中的数据绑定。它从SQL Sever Northwind Employees表中挑选出了雇员的名字和电话号码。查询值通过ASP.NET Repeater控制器显示。列值通过数据绑定插入。表格的窗体标题通过方法调用组装。另外,Dataitem的ItemIndex性质用于显示行数。ItemIndex性质从0开始,在其显示之间会加1。
Listing B包含了等同的VB.NET代码。主要的不同之处在于VB.NET中使用圆括号而C#中使用方括号。而且行的投射在VB.NET中是不必要的。
使用Contain.DataItem有些沉闷,因为随时要注意数据类型和数据类型的转化。微软提供了DataBinder类,它可以进一步简化开发。