ASP.NET Eval四种绑定方式

1、1.x中的数据绑定语法

<asp:Literal id="litEval2" runat="server" Text=‘<%#DataBinder.Eval(Container.DataItem, "userName")%>‘ />

2、 2.x简化Eval数据绑定语法

<asp:Literal id="litEval1" runat="server" Text=‘<%Eval("userName")%>‘ />

3、第二种方法的方法重载

<a href=‘<%# Eval("userId","Default.aspx?id={0}")%>‘><%# Eval("userName") %></a>

4、eval同时绑定两个值

<a href=‘<%# string.Format("Default.aspx?id={0}&role={1}", Eval("userId"),Eval("userRole"))%>‘><%# Eval("userName") %></a>

eval_r()方法在运行时使用反射执行后期绑定计算,因此与标准的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_r("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_r(Container.DataItem, "IntegerValue", "{0:c}") %>

格式字符串参数是可选的。如果它被忽略,DataBinder.Eval 将返回类型对象的值,如下面的示例所示:
<%# (bool)DataBinder.eval_r(Container.DataItem, "BoolValue") %>
当对模板化列表中的控件进行数据绑定时,DataBinder.Eval 特别有用,因为数据行和数据字段通常都必须强制转换。

在TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现。以下是Bind方法的格式,Eval的格式也是和Bind一样的。 Bind("列的名称","显示的格式文")

比如我们要取个日期型的数据,在数据库中列名是updated,数值是2008/06/01。但是想2008年06月01日这样显示,我们可以这样来写Bind("updated", "{0:yyyy年MM月dd日}"),Eval也是如此。

两者都能读取数据中的值,并显示。当我们使用编辑更新操作时,Bind能够自动的将修改的值更新到数据库中,并显示出修改后的值。但是用了Eval却只能得到错误画面,新的数据没有更新到数据库中。

从这点看来,Bind方法和Eval方法的区别就是:Bind方法在读取和更新数据这2方面都是可以,但是Eval方法只能读取显示数据。所以,我们在选择Bind方法和Eval方法的时候,必须要有争对性,当数据肯定需要更新操作的时候我们应该使用Bind,只是显示数据,不会有任何操作的就可以使用Eval方法。

在更新操作中我们可以在GridView1_RowUpdating事件中操作,例子如下:

如果我们能充分理解Bind方法和Eval方法,其实也就没必要向上面那样去写,都是可以自动完成的。上面的方法除了比较复杂的操作才会用到,这也是一个使用技巧。

时间: 2024-10-11 20:39:20

ASP.NET Eval四种绑定方式的相关文章

ASP.NET Eval四种绑定方式 及详解

1.1.x中的数据绑定语法 <asp:Literal id="litEval2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "userName")%>' /> 2. 2.x简化Eval数据绑定语法 <asp:Literal id="litEval1" runat="server" Text='<

call apply bind 的区别,this的四种绑定方式

1. apply()中有两个参数,不一定是必填项,当第一个参数什么都不填或则是null/undefined,默认为window 第二个参数必须是数组,数组中的元素和函数的参数对应 Call怎么使用 用途,用于修改函数中的this指向 也是函数ming.call(),执行的元素先替换函数中的this,然后再执行这个函数 Call中参数的分析1. call函数的第一个参数是什么,函数中this就换成什么,当不填或null/undefined,里面的this就是window2. 从第二参数开始,跟函数

ZigBee的 四种绑定方法简介

绑定是Zigbee中非常重要的一个概念,想必大家都看了很多文章,其中以“Zigbee四种绑定方式在TI_Z-Stack协议栈中的应用”最为典型,此文我也读过几遍,收货颇丰.此外飞比(Feibit)论坛上也有帖子讲解了EndDeviceBinding蛋疼的传来传去机理,分析的也相当透彻.我这里不在想解释具体的各种绑定方式的代码实现和机制,而是简单说明一下各种绑定机制的特点,希望大家能够从应用层面上概念性地理解和认识绑定,然后针对各种机制的应用场景加以举例.一.绑定方式再解释Zigbee绑定的四种方

ASP.NET Core 四种方式绑定枚举值

原文:ASP.NET Core 四种方式绑定枚举值 前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满满的干货,你值得拥有. 探讨枚举绑定方式# 我们首先给出要绑定的枚举类. public enum Language { JavaScript, Java, C, Python, SQL, Oracle } 枚举绑定方式一(@Html.DropDow

Android开发之基本控件和详解四种布局方式

Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局.而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式.先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio.开始今天的正题, 虽然A

Nginx 四种分配方式——session处理

最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大.. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查. 如果只有一台服务器时,这个服务器挂了,那么对于网站来说是个灾难.因此,这时候的负载均衡就会大显身手了,它会自动剔除挂掉的服务器. 下面简单的介绍下我使用Nginx做负载的体会 下载---安装Ngi

spring security四种实现方式

spring security四种实现方式 标签: spring security spring spring(20) > 目录(?)[+] 最简单配置spring-securityxml实现1 实现UserDetailsService 实现动态过滤用户权限 实现AuthenticationProvider自定义参数验证 spring security实现方式大致可以分为这几种: 1.配置文件实现,只需要在配置文件中指定拦截的url所需要权限.配置userDetailsService指定用户名.

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中. 解:MATLAB指令: theta=0:0.1:6*pi;rho=cos(theta/3)+1/9; >> polar(theta,rho) >> >> plot(theta,rho) >> semilogx(theta,rho) >> grid >> hist(rho,15) 结果分别如下图: 图1 图2 图3 图4

mysql的四种启动方式

mysql的四种启动方式: 1.mysqld 启动mysql服务器:./mysqld --defaults-file=/etc/my.cnf --user=root 客户端连接: mysql --defaults-file=/etc/my.cnf or mysql -S /tmp/mysql.sock 2.mysqld_safe 启动mysql服务器:./mysqld_safe --defaults-file=/etc/my.cnf --user=root & 客户端连接: mysql --de