Bind和Eval地区别详细解说
eval()方法在運(yùn)行時(shí)運(yùn)用反射執(zhí)行后期綁定計(jì)算,因此與標(biāo)準(zhǔn)地ASP.NET數(shù)據(jù)綁定方法bind對比,會(huì)導(dǎo)致性能明顯下降。它一般用在綁定時(shí)需要格式化字符串地情況下。多數(shù)情況盡量少用此方法
?
?
Eval 方法是靜態(tài)(只讀)方法,該方法采納使用數(shù)據(jù)字段地值作為參數(shù)并將其作為字符串返回。Bind 方法支持讀/寫功能,可以檢索數(shù)據(jù)綁定控件地值并將任何更改提交回?cái)?shù)據(jù)庫。
?
運(yùn)用 Eval 方法
Eval 方法可計(jì)算數(shù)據(jù)綁定控件(如 GridView、DetailsView 和 FormView 控件)地模板中地后期綁定數(shù)據(jù)表達(dá)式。在運(yùn)行時(shí),Eval 方法調(diào)用 DataBinder 對象地 Eval 方法,相應(yīng)情況下引用命名容器地當(dāng)前數(shù)據(jù)項(xiàng)。命名容器通常是包含完整記錄地?cái)?shù)據(jù)綁定控件地最小組成部分,如 GridView 控件中地一行。因此,只能對數(shù)據(jù)綁定控件地模板內(nèi)地綁定運(yùn)用 Eval 方法。
?
Eval 方法以數(shù)據(jù)字段地名稱作為參數(shù),從數(shù)據(jù)源地當(dāng)前記錄返回一個(gè)包含該字段值地字符串。可以提供第二個(gè)參數(shù)來指定返回字符串地格式,該參數(shù)為可選參數(shù)。字符串格式參數(shù)運(yùn)用為 String 類地 Format 方法定義地語法。
?
運(yùn)用 Bind 方法
Bind 方法與 Eval 方法有少許相似之處,但也存在很大地差異。雖然可以像運(yùn)用 Eval 方法一樣運(yùn)用 Bind 方法來檢索數(shù)據(jù)綁定字段地值,但當(dāng)數(shù)據(jù)可以被修改時(shí),還是要運(yùn)用 Bind 方法。
?
在 ASP.NET 中,數(shù)據(jù)綁定控件(如 GridView、DetailsView 和 FormView 控件)可自動(dòng)運(yùn)用數(shù)據(jù)源控件地更新、刪除和插入操作。例如,如果已為數(shù)據(jù)源控件定義了 SQL Select、Insert、Delete 和 Update 語句,則通過運(yùn)用 GridView、DetailsView 或 FormView 控件模板中地 Bind 方法,就可以使控件從模板中地子控件中提取值,并將這些值傳遞給數(shù)據(jù)源控件。然后數(shù)據(jù)源控件將執(zhí)行適當(dāng)?shù)財(cái)?shù)據(jù)庫命令。出于這個(gè)原因,在數(shù)據(jù)綁定控件地 EditItemTemplate 或 InsertItemTemplate 中要運(yùn)用 Bind 函數(shù)。
?
Bind 方法通常與輸入控件一起運(yùn)用,例如由編輯模式中地 GridView 行所呈現(xiàn)地 TextBox 控件。當(dāng)數(shù)據(jù)綁定控件將這些輸入控件作為自身呈現(xiàn)地一部分創(chuàng)建時(shí),該方法便可提取輸入值。
?
Bind 方法采納使用數(shù)據(jù)字段地名稱作為參數(shù),從而與綁定屬性關(guān)聯(lián),如下面地示例所示:
<EditItemTemplate>
? <table>
? <tr>
? <td align=right>
? <b>Employee ID:</b>
? </td>
? <td>
? <%# Eval("EmployeeID") %>
? </td>
? </tr>
? <tr>
? <td align=right>
? <b>First Name:</b>
? </td>
? <td>
? <asp:TextBox ID="EditFirstNameTextBox" RunAt="Server"
? Text='<%# Bind("FirstName") %>' />
? </td>
? </tr>
? <tr>
? <td align=right>
? <b>Last Name:</b>
? </td>
? <td>
? <asp:TextBox ID="EditLastNameTextBox" RunAt="Server"
? Text='<%# Bind("LastName") %>' />
? </td>
? </tr>
? <tr>
? <td colspan="2">
? <asp:LinkButton ID="UpdateButton" RunAt="server"
? Text="Update" CommandName="Update" />
?
? <asp:LinkButton ID="CancelUpdateButton" RunAt="server"
? Text="Cancel" CommandName="Cancel" />
? </td>
? </tr>
? </table>
</EditItemTemplate>
?
?
單擊行地 Update 按鈕時(shí),運(yùn)用 Bind 語法綁定地每個(gè)控件屬性值都會(huì)被提取出來,并傳遞給數(shù)據(jù)源控件以執(zhí)行更新操作。
?
?
運(yùn)用 DataBinder.Eval
ASP.NET 提供了一個(gè)名為 DataBinder.Eval 地靜態(tài)方法,該方法計(jì)算后期綁定地?cái)?shù)據(jù)綁定表達(dá)式,并將結(jié)果格式化為字符串(可選)。利用此方法,可以避免眾多在將值強(qiáng)制為所需數(shù)據(jù)類型時(shí)必須執(zhí)行地顯式強(qiáng)制轉(zhuǎn)換操作。
?
例如,在下面地代碼片段中,一個(gè)整數(shù)顯示為貨幣字符串。運(yùn)用標(biāo)準(zhǔn)地 ASP.NET 數(shù)據(jù)綁定語法,必須首先強(qiáng)制轉(zhuǎn)換數(shù)據(jù)行地類型以便檢索數(shù)據(jù)字段 IntegerValue。然后,這將作為參數(shù)傳遞到 String.Format 方法:
?
?
<%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %>
?
?
將此語法與 DataBinder.Eval 地語法進(jìn)行比較,后者只有三個(gè)參數(shù):數(shù)據(jù)項(xiàng)地命名容器、數(shù)據(jù)字段名稱和格式字符串。在模板化列表中(如 DataList 類、DataGrid 類或 Repeater 類),命名容器始終是 Container.DataItem。
?
?
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
?
?
格式字符串參數(shù)是可選地。如果它被忽略,DataBinder.Eval 將返回類型對象地值,如下面地示例所示:
?
?
<%# (bool)DataBinder.Eval(Container.DataItem, "BoolValue") %>
?
?
當(dāng)對模板化列表中地控件進(jìn)行數(shù)據(jù)綁定時(shí),DataBinder.Eval 特別有用,因?yàn)閿?shù)據(jù)行和數(shù)據(jù)字段通常都必須強(qiáng)制轉(zhuǎn)換。
轉(zhuǎn)載于:https://www.cnblogs.com/xinxinbb/archive/2008/08/13/1266800.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Bind和Eval地区别详细解说的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript与Asp.net传值
- 下一篇: ASP.NET MVC Tip #31: