国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET立即上手教程(8)

2024-07-10 13:12:19
字體:
來源:轉載
供稿:網友
中國最大的web開發資源網站及技術社區,

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的簡寫方式<%= %>很類似,但他們的運行機理卻大不相同。response.write的簡寫語法在頁面處理的時候求值,而asp.net數據綁定語法只有當調用databind方法的時候才求值。

databind是page和所有服務器控件的一個方法。當你對一個父控件調用databind方法的時候,他所包含的子控件都會調用databind方法。比如執行datalist1.databind(),datalist模板中的所有控件都引用了databind方法。在page調用databind方法--- page.databind()或者簡單的databind() ---導致頁面上所有的數據綁定表達式都會被求值。databind經常在page_load事件中被調用,比如下面的例子:

protected void page_load(object src, eventargs e) {
  databind();
}

你幾乎可以在.aspx頁面中聲明部分的任何地方使用數據綁定表達式,在運行時提供它所計算的預期的數據類型。當求值以后,簡單的屬性、表達式以及上例中的方法,將向用戶顯示文本。在這些情況下,數據綁定表達式必須求出一個string類型的值。在集合的例子中,數據綁定表達式所求值的類型,對于listbox的datasource 屬性來說是有效的。你會發現,在數據綁定表達式中為了得到期望的結果,強制轉換結果值的類型,是很有必要的。例如,如果count是一個整數:

number of records: <%# count.tostring() %>

綁定簡單屬性

asp.net數據綁定語法支持綁定頁面的公共變量和屬性,以及頁面上其他控件的屬性。

下面的例子說明了綁定到頁面的公共變量和簡單屬性。注意這些值在調用databind()之前已被初始化。

綁定集合和列表

列表服務器控件,如datagrid、 listbox 和 htmlselect,使用集合作為數據源。下面的例子說明綁定到常用的clr 集合類型。這些控件只能綁定到支持ienumerable, icollection, 或 ilistsource 接口的集合。通常,您可以綁定到arraylist、 hashtable、 dataview 和datareader.

很多時候,在綁定到頁面或控制之前,你可能會操作這些數據。
 
databinder.eval方法

asp.net框架提供了一個靜態方法databinder.eval,可以計算后期數據綁定表達式的值,并可以將結果任意格式化為字符串。databinder.eval是很方便的,他排除了許多開發人員必須作的(通過強制改變值的類型來得到預期的數據類型)顯式轉換。尤其是在帶有模板列表的數據綁定控件中,因為經常需要顯式轉換數據行和數據字段,所以它特別有用。

仔細看下面的代碼,整數將被顯示為貨幣型字符串。使用標準的asp.net數據綁定語法,為了得到數據字段integervalue,你必須首先顯式轉換數據行的類型,然后作為string.format方法的參數才能得到結果

<%# string.format("{0:c}", ((datarowview)container.dataitem)["integervalue"]) %>

這樣的語法實在錯綜復雜的難以記憶。比較而言,databinder.eval 就很簡單了。它帶有三個參數:數據項的命名容器、數據字段名稱和格式化字符串。 在模板列表如datalist、datagrid、或 repeater,命名容器總是container.dataitem。 page 是另一個可以被databinder.eval使用的命名容器。

<%# databinder.eval(container.dataitem, "integervalue", "{0:c}") %>

格式化字符串參數是可選的。如果忽略參數,databinder.eval 返回對象類型的值,就象下面的代碼這樣:

<%# (bool)databinder.eval(container.dataitem, "boolvalue") %>

很重要的一點需要注意:由于受后期綁定影響,databinder.eval與標準的數據綁定語法相比,在執行效率上有明顯的差別。因此有選擇地使用databinder.eval,特別是不需要對字符串進行格式化的時候。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖北省| 区。| 洱源县| 新邵县| 西安市| 轮台县| 阜城县| 竹山县| 辰溪县| 嘉义市| 石河子市| 二连浩特市| 九寨沟县| 同仁县| 吉首市| 固原市| 珲春市| 天峻县| 应城市| 榆社县| 雷州市| 新丰县| 平舆县| 梨树县| 安化县| 韶山市| 翁源县| 崇仁县| 获嘉县| 于都县| 西丰县| 南雄市| 南皮县| 琼结县| 龙岩市| 临泽县| 韩城市| 区。| 高邮市| 岳阳县| 九江县|