asp.net|資料|頁面
如果熟悉經典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類,它可以進一步簡化開發。
使用DataBinder
微軟文檔(MSDN)中詳細解釋了DataBinder類。此方法可以讓RAD設計器輕易的產生解析資料繫結文法。此方法也可以用於Web表單頁面的聲明簡化從一種到另一類型的映射。
在ASP.NET頁面中使用資料值時,可以使用DataBinder 類的Eval方法讓.NET完成這個繁重的工作。Eval方法接受先前被覆蓋的Container.DataItem對象;它計算出運算式中每一確定欄位的詳細資料並且將他們顯示出來。其文法如下:
DataBinder.Eval(Container.DataItem, "field name", "optional formatting")
採用此文法,可以使用DataBinder.Eval重寫第一個樣本,其C#代碼見Listing C。Listing D包含VB.NET等同代碼。
DataBinder.Eval在將工作推向系統方面的能力是很強的,同時也要注意系統定位元素和確定對象/資料類型的時間和資源的開銷很大。
豐富的選項
資料繫結使得向ASP.NET頁面中放入資料的工作變得相對簡單。有很多種不同資料繫結選項可供選擇,他們包括:綁定資料到控制器並且確定如何顯示,或在ASP.NET頁面上選擇聲明的資料繫結到控制器。最後,它由你的喜好所決定,但是有很多選擇終究是件好事。
Tony Patton作為軟體開發人員開始了其職業生涯,他已經通過了Java、VB、Lotus和XML認證。