Bind和Eval的區別詳解

2021-06-02 01:56:10 字數 3972 閱讀 2824

bind和eval的區別詳解

1.簡單描述eval和bind的區別

繫結表示式

<%# eval("欄位名") %>

<%# bind("欄位名") %>

區別 1.eval是唯讀資料,bind是可更新的.

2.當對次表示式操作時候,必須用eval 如<%# eval("欄位名").tostring().trim() %>

2.若gridview中繫結列裡面 設定 內容格式 dataformatestring = ,則 必須把 屬性 htmlcode 設定為false,否則無法 起作用;

eval 單向繫結:資料是唯讀的

bind 雙向繫結:資料可以更改,並返回伺服器端,伺服器可以處理更改後的資料,如存入資料庫.

2、詳細介紹

eval()方法在執行時使用反射執行後期繫結計算,因此與標準的asp.net資料繫結方法bind相比,會導致效能明顯下降。它一般用在繫結時需要格式化字串的情況下。多數情況盡量少用此方法

eval 方法是靜態(唯讀)方法,該方法採用資料字段的值作為引數並將其作為字串返回。bind 方法支援讀/寫功能,可以檢索資料繫結控制項的值並將任何更改提交回資料庫。

使用 eval 方法

eval 方法可計算資料繫結控制項(如 gridview、detailsview 和 formview 控制項)的模板中的後期繫結資料表示式。在執行時,eval 方法呼叫 databinder 物件的 eval 方法,同時引用命名容器的當前資料項。命名容器通常是包含完整記錄的資料繫結控制項的最小組成部分,如 gridview 控制項中的一行。因此,只能對資料繫結控制項的模板內的繫結使用 eval 方法。

eval 方法以資料字段的名稱作為引數,從資料來源的當前記錄返回乙個包含該字段值的字串。可以提供第二個引數來指定返回字串的格式,該引數為可選引數。字串格式引數使用為 string 類的 format 方法定義的語法。

使用 bind 方法

bind 方法與 eval 方法有一些相似之處,但也存在很大的差異。雖然可以像使用 eval 方法一樣使用 bind 方法來檢索資料繫結欄位的值,但當資料可以被修改時,還是要使用 bind 方法。  

在 asp.net 中,資料繫結控制項(如 gridview、detailsview 和 formview 控制項)可自動使用資料來源控制項的更新、刪除和插入操作。例如,如果已為資料來源控制項定義了 sql select、insert、delete 和 update 語句,則通過使用 gridview、detailsview 或 formview 控制項模板中的 bind 方法,就可以使控制項從模板中的子控制項中提取值,並將這些值傳遞給資料來源控制項。然後資料來源控制項將執行適當的資料庫命令。出於這個原因,在資料繫結控制項的 edititemtemplate 或 insertitemtemplate 中要使用 bind 函式。

bind 方法通常與輸入控制項一起使用,例如由編輯模式中的 gridview 行所呈現的 textbox 控制項。當資料繫結控制項將這些輸入控制項作為自身呈現的一部分建立時,該方法便可提取輸入值。  

bind 方法採用資料字段的名稱作為引數,從而與繫結屬性關聯,如下面的示例所示:

>

<

table

>

<

tr>

<

tdalign=right

>

<

b>employee id:

b>

td>

<

td>

<%# eval("employeeid") %>

td>

tr>

<

tr>

<

tdalign=right

>

<

b>first name:

b>

td>

<

td>

<

asp:textbox

id="editfirstnametextbox"

runat="server"

text='<%# bind("firstname") %>'

/>

td>

tr>

<

tr>

<

tdalign=right

>

<

b>last name:

b>

td>

<

td>

<

asp:textbox

id="editlastnametextbox"

runat="server"

text='<%# bind("lastname") %>'

/>

td>

tr>

<

tr>

<

tdcolspan="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 按鈕時,使用 bind 語法繫結的每個控制項屬性值都會被提取出來,並傳遞給資料來源控制項以執行更新操作。

使用 databinder.eval

asp.net 提供了乙個名為 databinder.eval 的靜態方法,該方法計算後期繫結的資料繫結表示式,並將結果格式化為字串(可選)。利用此方法,可以避免許多在將值強制為所需資料型別時必須執行的顯式強制轉換操作。

例如,在下面的**片段中,乙個整數顯示為貨幣字串。使用標準的 asp.net 資料繫結語法,必須首先強制轉換資料行的型別以便檢索資料字段 integervalue。然後,這將作為引數傳遞到 string.format 方法:

<%# string.format("", ((datarowview)container.dataitem)["integervalue"]) %>

將此語法與 databinder.eval 的語法進行比較,後者只有三個引數:資料項的命名容器、資料欄位名稱和格式字串。在模板化列表中(如 datalist 類、datagrid 類或 repeater 類),命名容器始終是 container.dataitem。

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

格式字串引數是可選的。如果它被忽略,databinder.eval 將返回型別物件的值,如下面的示例所示:

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

當對模板化列表中的控制項進行資料繫結時,databinder.eval 特別有用,因為資料行和資料字段通常都必須強制轉換。

3.其它

eval:繫結的是唯讀資料的顯示;bind:可以繫結唯讀資料也可以繫結更新資料,bind方法還把字段和控制項的繫結屬性聯絡起來,使得資料控制項(比如gridview等)的update、insert和delete等方法可以使用這種聯絡來作出相應的處理。

eval 和 bind繫結的資料在<%# %> 顯示, 若對要顯示的資料作修改或者操作也在<%# %> 中,例如:

1, 對顯示的字串作字元顯示:<%# (eval("address")).tostring().substring(0,10)%>,顯示10位數的位址。

2, 對顯示的資訊作判斷:<%# (eval("if_delete")).tostring == "yes" ?"已刪除":"未刪除"%>

bind和eval的區別

eval 方法 在執行時使用反射執行後期繫結計算,因此與標準的asp.net資料繫結方法bind相比,會導致效能明顯下降。它一般用在繫結時需要格式化字串的情況下。多數情況盡量少用此方法 eval 方法是靜態 唯讀 方法,該方法採用資料字段的值作為引數並將其作為字串返回。bind 方法支援讀 寫功能,...

Eval方法和Bind方法的區別?

eval方法和bind方法的區別?eval是唯讀的方法 單向資料繫結 所繫結的內容為不會提交回伺服器。比如圖書的isbn,並不想讓使用者做任何修改,可以使用 eval isbn tostring trim eval還有乙個過載的方法,可以實現格式化。比如需要顯示圖書的出版日期,可以使用 eval p...

C 中Bind和Eval的區別

資料繫結表示式包含在 和 分隔符之內,並使用eval和bind函式。eval函式用於定義單向 唯讀 繫結。bind函式用於定義雙向 可更新 繫結。除了通過在資料繫結表示式中呼叫eval和bind方法執行資料繫結外,還可以呼叫 和 分隔符之內的任何公共範圍 以在頁面處理過程中執行該 並返回乙個值。ev...