Bind和Eval的区别详解

news/2025/2/23 15:30:15

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 方法采用数据字段的名称作为参数,从而与绑定属性关联,如下面的示例所示:
<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 按钮时,使用 Bind 语法绑定的每个控件属性值都会被提取出来,并传递给数据源控件以执行更新操作。


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

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


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


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


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

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


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


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

 


http://www.niftyadmin.cn/n/1413045.html

相关文章

Asp.NET的Trace追踪

http://m.blog.csdn.net/article/details?id7026402 当我们扑捉程序错误时&#xff0c;调试器是开发者们最得力的助手。然而&#xff0c;ASP.NET的跟踪&#xff0c;在调试时是一个很棒的不容忽视的辅助&#xff0c;它允许你的ASP.NET代码在执行期间输出消息&#xff0c;提供有…

3、Java程序讲解

HelloWorld.javapublic class HelloWorld { public static void main(String[] args) { System.out.println("HelloWorld!"); }} 1、Java源文件以java为扩展名。源文件的基本组成部分是类&#xff08;class&#xff09;&#xff0c;如本例中的HelloWord类。类名称可以…

Ribbon、Feign和OpenFeign的区别

Ribbon Ribbon 是 Netflix开源的基于HTTP和TCP等协议负载均衡组件 Ribbon 可以用来做客户端负载均衡&#xff0c;调用注册中心的服务 Ribbon的使用需要代码里手动调用目标服务&#xff0c;请参考官方示例&#xff1a;https://github.com/Netflix/ribbon Feign Feign是Spri…

Linux内核同步机制之(二):Per-CPU变量

转自&#xff1a;http://www.wowotech.net/linux_kenrel/per-cpu.html 一、源由&#xff1a;为何引入Per-CPU变量&#xff1f; 1、lock bus带来的性能问题 在ARM平台上&#xff0c;ARMv6之前&#xff0c;SWP和SWPB指令被用来支持对shared memory的访问&#xff1a; SWP <Rt&…

.NET下GDI+的一些常用应用(水印,文字,圆角处理)

在某些情况下希望处理一些图片&#xff0c;比如给图片添加一般文字&#xff1a;原图程序处理成给图片添加水印&#xff1a;原图程序处理成还有圆角效果&#xff1a;原图程序处理成注&#xff1a;&#xff08;1&#xff09;以下程序针对这个应用&#xff0c;也许这些对你没有用&…

在PyQt4中使用matplotlib

matplotlib作为Python中著名的数据可视化工具&#xff0c;其官网也提供了在PyQt4中使用的源码&#xff0c;这里举一个应用实例&#xff0c;以备不时之需。 1) 利用Qt Designer创建GUI界面 Demo的GUI界面&#xff0c;如图1所示&#xff0c;其中利用QFrame作为放置matplotlib界面…

解决Spring Cloud Gateway 2.x跨域时出现重复Origin的BUG

版本 Spring Cloud &#xff1a;Greenwich.SR1 Spring Cloud Gateway : 2.1.1.RELEASE 现象 跨域时POST请求body内容为空&#xff0c;报跨域失败错误 原因是Access-Control-Allow-Origin只允许有一个值&#xff0c;而响应头里有多个Origin The ‘Access-Control-Allow-Origi…

STM32之红外遥控信号自学习实现

一、序言 很早前就想实现这个红外遥控自学习的这个实验&#xff0c;用于来自己控制房子里如空调等红外遥控设备的自动化&#xff0c;NEC的标准到具体的产品上可能就被厂家定义为不一样了&#xff0c;所以自学习就应该是接收到什么就发送什么&#xff0c;不用管内容是什么&#…