ASP.NET中Bind和Eval的区别:两种绑定

开发 后端
本文详细说明了asp.net中Bind和Eval两者之间的区别。eval()方法在运行时使用反射执行后期绑定计算,因此与标准的asp.net数据绑定方法bind相比,会导致性能明显下降。

eval()方法在运行时使用反射执行后期绑定计算,因此与标准的asp.net数据绑定方法bind相比,会导致性能明显下降。它一般用在绑定时需要格式化字符串的情况下。多数情况尽量少用此方法  

Eval 方法是静态(只读)方法,该方法采用数据字段的值作为参数并将其作为字符串返回。Bind 方法支持读/写功能,可以检索数据绑定控件的值并将任何更改提交回数据库。  

asp.net中的Bind和Eval:使用 Eval 方法

Eval 方法可计算数据绑定控件(如 GridView、DetailsView 和 FormView 控件)的模板中的后期绑定数据表达式。在运行时,Eval 方法调用 DataBinder 对象的 Eval 方法,同时引用命名容器的当前数据项。命名容器通常是包含完整记录的数据绑定控件的最小组成部分,如 GridView 控件中的一行。因此,只能对数据绑定控件的模板内的绑定使用 Eval 方法。  

Eval 方法以数据字段的名称作为参数,从数据源的当前记录返回一个包含该字段值的字符串。可以提供第二个参数来指定返回字符串的格式,该参数为可选参数。字符串格式参数使用为 String 类的 Format 方法定义的语法。   

asp.net中的Bind和Eval:使用 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 方法采用数据字段的名称作为参数,从而与绑定属性关联,如下面的示例所示:  

  1. < EditItemTemplate>   
  2.    < table>   
  3.    < tr>   
  4.    < td align=right>   
  5.    < b>Employee ID:< /b>   
  6.    < /td>   
  7.    < td>   
  8.    < %# Eval("EmployeeID") %>   
  9.    < /td>   
  10.    < /tr>   
  11.    < tr>   
  12.    < td align=right>   
  13.    < b>First Name:< /b>   
  14.    < /td>   
  15.    < td>   
  16.    < asp:TextBox ID="EditFirstNameTextBox" RunAt="Server"   
  17.    Text='< %# Bind("FirstName") %>' />   
  18.    < /td>   
  19.    < /tr>   
  20.    < tr>   
  21.    < td align=right>   
  22.    < b>Last Name:< /b>   
  23.    < /td>   
  24.    < td>   
  25.    < asp:TextBox ID="EditLastNameTextBox" RunAt="Server"   
  26.    Text='< %# Bind("LastName") %>' />   
  27.    < /td>   
  28.    < /tr>   
  29.    < tr>   
  30.    < td colspan="2">   
  31.    < asp:LinkButton ID="UpdateButton" RunAt="server"   
  32.    Text="Update" CommandName="Update" />   
  33.      
  34.    < asp:LinkButton ID="CancelUpdateButton" RunAt="server"   
  35.    Text="Cancel" CommandName="Cancel" />   
  36.    < /td>   
  37.    < /tr>   
  38.    < /table>   
  39.    < /EditItemTemplate>   

单击行的 Update 按钮时,使用 Bind 语法绑定的每个控件属性值都会被提取出来,并传递给数据源控件以执行更新操作。

asp.net中的Bind和Eval:使用 DataBinder.Eval

asp.net 提供了一个名为 DataBinder.Eval 的静态方法,该方法计算后期绑定的数据绑定表达式,并将结果格式化为字符串(可选)。利用此方法,可以避免许多在将值强制为所需数据类型时必须执行的显式强制转换操作。   

例如,在下面的代码片段中,一个整数显示为货币字符串。使用标准的 asp.net 数据绑定语法,必须首先强制转换数据行的类型以便检索数据字段 IntegerValue。然后,这将作为参数传递到 String.Format 方法:   

  1. < %# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %>   

将此语法与 DataBinder.Eval 的语法进行比较,后者只有三个参数:数据项的命名容器、数据字段名称和格式字符串。在模板化列表中(如 DataList 类、DataGrid 类或 Repeater 类),命名容器始终是 Container.DataItem。    

  1. < %# DataBinder.Eval(Container.DataItem, "IntegerValue""{0:c}") %>  

格式字符串参数是可选的。如果它被忽略,DataBinder.Eval 将返回类型对象的值,如下面的示例所示:      

  1. < %# (bool)DataBinder.Eval(Container.DataItem, "BoolValue") %>     

当对模板化列表中的控件进行数据绑定时,DataBinder.Eval 特别有用,因为数据行和数据字段通常都必须强制转换。

以上就是asp.net中Bind和Eval的区别,希望在asp.net的应用中对大家有所帮助。

【编辑推荐】

  1. ASP.NET中使用AJAX中的方式
  2. ASP.NET中WCF服务与ASMX服务的兼容性
  3. ASP.NET中using的用法三则
  4. ASP.NET表单介绍
  5. ASP.NET中Get和Post的用法
责任编辑:book05 来源: hi.baidu
相关推荐

2009-07-20 15:18:18

Bind标签Eval标签ASP.NET 2.0

2009-07-22 15:50:36

J#和C++ASP.NET

2009-09-10 23:17:33

ASP.NET Eva

2009-07-22 18:03:00

ASP.NET ASP

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入门教程

2010-07-15 14:38:55

Perl eval函数

2011-06-08 11:05:38

getpost

2009-09-10 22:36:51

ASP.NET Eva

2009-07-27 14:41:33

ASP.NET调用存储

2009-07-28 14:06:28

ASP.NET 2.0

2009-07-22 17:21:27

ASP.NET 2.0

2009-08-04 17:20:37

PostBack和ViASP.NET

2009-07-20 18:06:26

ASP.NET限制上传

2009-07-29 16:08:07

ASP和ASP.NET

2009-06-09 11:37:51

ViewStateViewDataASP.NET

2009-07-31 18:12:58

ASP.NET数据绑定

2009-08-05 17:26:25

ASP.NET 2.0

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2009-07-29 16:53:52

ASP.NET Get
点赞
收藏

51CTO技术栈公众号