asp.net 引入了新的声明性数据绑定语法.这种非常灵活的语法允许开发人员不仅可以绑定到数据源,而且可以绑定到简单属性.集合.表达式甚至是从方法调用返回的结果.下表显示了新语法的一些示例.
数据绑定概述与语法
简单属性 customer: <%# custid %>
集合 orders: <asp:listbox id="list1" datasource=´<%# myarray %>´ runat="server">
表达式 contact: <%# ( customer.first name + " " + customer.lastname ) %>
方法结果 outstanding balance: <%# getbalance(custid) %>
尽管该语法看起来与 asp 的 response.write 快捷方式 <%= %> 相似,但其行为完全不同.asp response.write 快捷方式语法在处理页时计算,而 asp.net 数据绑定语法仅在调用 databind 方法时计算.
databind 是页与所有服务器控件的方法.当在父控件上调用 databind 时,它级联到该控件的所有子控件.例如,datalist1.databind() 将因此对 datalist 模板中的每一控件调用 databind 方法.在页上调用 databind — page.databind() 或只是 databind() — 会导致计算页上的所有数据绑定表达式.通常从 page_load 事件调用 databind,如下例所示.
protected void page_load(object src, eventargs e) {
databind();
}
protected sub page_load(src as object, e as eventargs)
databind()
end sub
protected function page_load(src:object, e:eventargs) : void {
databind();
}
如果绑定表达式在运行时计算为预期的数据类型,则可以在 .aspx 页的声明节中的几乎任何位置使用绑定表达式.上面的简单属性.表达式与方法示例在计算时向用户显示文本.这些情况下,数据绑定表达式必须计算为 string 类型的值.在集合示例中,数据绑定表达式计算为 listbox 的 datasource 属性的有效类型值.您可能会发现有必要转换绑定表达式中的类型值以产生所需的结果.例如,如果 count 是整数:
number of records: <%# count.tostring() %>
绑定到简单属性
asp.net 数据绑定语法支持绑定到公共变量.页的属性与页上其他控件的属性.
下面的示例说明如何绑定到公共变量与页上的简单属性.注意这些值在 databind() 调用前初始化. ... <html>
<head>
<script language="c#" runat="server">
void page_load(object sender, eventargs e) {
page.databind();
}
string custid{
get {
return "alfki";
}
}
int ordercount{
get {
return 11;
}
}
</script>
</head>
<body>
<h3><font face="宋体">到页属性的数据绑定</font></h3>
<form runat=server>
客户:<b><%# custid %></b><br>
未结的订单:<b><%# ordercount %></b>
</form>
</body>
</html>
下面的示例说明如何绑定到另一控件的属性.
<html>
<head>
<script language="c#" runat="server">
void submitbtn_click(object sender, eventargs e) {
// 仅调用“page.databind”,而不是从“statelist”
// 中显式取出变量,然后操作标签控件.
// 这将计算页内所有的 <%# %> 表达式
}
page.databind();
</script>
</head>
<body>
<h3><font face="宋体">到另一个服务器控件的属性的数据绑定</font></h3>
<form runat=server>
<asp:dropdownlist id="statelist" runat="server">
<asp:listitem>ca</asp:listitem>
<asp:listitem>in</asp:listitem>
<asp:listitem>ks</asp:listitem>
<asp:listitem>md</asp:listitem>
<asp:listitem>mi</asp:listitem>
<asp:listitem>or</asp:listitem>
<asp:listitem>tn</asp:listitem>
<asp:listitem>ut</asp:listitem>
</asp:dropdownlist>
<asp:button text="提交" οnclick="submitbtn_click" runat=server/>
<p>
选定的州:<asp:label text=´<%# statelist.selecteditem.text %>´ runat=server/>
</form>
</body>
</html>
绑定到集合与列表
像 datagrid.listbox 与 htmlselect 这样的列表服务器控件将集合用作数据源.下面的示例说明如何绑定到通常的公共语言运行库集合类型.这些控件只能绑定到支持 ienumerable.icollection 或 ilistsource 接口的集合.最常见的是绑定到 arraylist.hashtable.dataview 与 datareader.
下面的示例说明如何绑定到 arraylist.