Eval 和 Bind 的区别
原文发布时间为:2008-10-20 —— 来源于本人的百度文章 [由搬家工具导入]
据绑定表达式包含在 <%# 和 %> 分隔符之内,并使用 Eval 和 Bind 函数。
Eval 函数用于定义单向(只读)绑定。
Bind 函数用于定义双向(可更新)绑定。
除了通过在数据绑定表达式中调用 Eval 和 Bind 方法执行数据绑定外,还可以调用 <%# 和 %> 分隔符之内的任何公共范围代码,以在页面处理过程中执行该代码并返回一个值。
调用控件或 Page 类的 DataBind 方法时,会对数据绑定表达式进行解析。对于有些控件,如 GridView、DetailsView 和 FormView 控件,会在控件的 PreRender 事件期间自动解析数据绑定表达式,不需要显式调用 DataBind 方法。
使用 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 方法采用数据字段的名称作为参数,从而与绑定属性关联,
显式调用 DataBind 方法
有些控件,如 GridView、FormView 和 DetailsView 控件,当它们通过 DataSourceID 属性绑定到数据源控件时,会通过隐式调用 DataBind 方法来执行绑定。但是,有些情况需要通过显式调用 DataBind 方法来执行绑定。
其中一种情况就是使用 DataSource 属性(而非 DataSourceID 属性)将某个控件绑定到数据源控件时。在这种情况下,需要显式调用 DataBind 方法,从而执行数据绑定和解析数据绑定表达式。
另一种情况就是需要手动刷新数据绑定控件中的数据时。假设有这样一个页面,其中有两个控件,这两个控件都显示来自同一数据库的信息(可能使用不同的视图)。在这种情况下,可能需要显式地将控件重新绑定到数据,以保持数据显示的同步。例如,可能有一个显示产品列表的 GridView 控件,和一个允许用户编辑单个产品的 DetailsView 控件。虽然 GridView 和 DetailsView 控件所显示的数据都来自同一数据源,但被绑定到不同的数据源控件,因为这两个控件使用不同的查询来获取其数据。用户可能会使用 DetailsView 控件更新记录,从而引发由关联的数据源控件执行更新。但是,由于 GridView 控件被绑定到不同的数据源控件,所以,该控件仍将显示旧的记录值,直至页面被刷新时才会更新。因此,在 DetailsView 控件更新数据后,可以调用 DataBind 方法。这会使 GridView 控件更新其视图,并重新执行任何数据绑定表达式以及 <%# 和 %> 分隔符之内的公共范围代码。这样一来,GridView 控件将会反映 DetailsView 控件所做的更新。
使用对查找表的绑定
一种有关数据绑定控件的常见方案是允许用户使用 DropDownList 控件或其他列表控件从查找表中选择一个值,以更新或插入该值。在这种情况下,将该查找控件绑定到返回可能值列表的单独数据源,而将该查找控件的选定值绑定到父数据绑定行中的字段。
可以按照如下方法添加此功能。首先,对于查找控件,向数据绑定控件(例如 GridView、DetailsView 或 FormView 控件)中的模板添加一个列表控件(DropDownList 或 ListBox 控件)。接着将查找控件的 SelectedValue 属性绑定到容器控件的数据源中的相关字段。其次,将查找控件的 DataSourceID 属性设置为可检索查找值的数据源控件。接着将查找控件的 DataTextField 属性设置为查找表中包含要显示的值的字段,并将其 DataValueField 属性设置为查找表中包含查找值的唯一标识符的字段(如果适用)。
下面的代码示例演示一个 DropDownList 控件,此控件包括在 FormView 控件的 InsertItemTemplate 模板中(它也可以是包括在 DetailsView 控件的 Fields 属性或 GridView 控件的 Columns 属性中的 TemplateField 的 InsertItemTemplate 模板)。DropDownList 控件的 SelectedValue 属性使用 Bind 方法实现与 FormView 控件当前行的 CategoryID 字段之间的双向绑定。将 DropDownList 控件的 DataSourceID 属性设置为单独的数据源控件,用于检索可能的类别名称和 ID 列表。将 DropDownList 控件的 DataTextField 属性设置为查找数据源中的 CategoryName 字段,以便显示可能的类别名称列表。将 DropDownList 控件的 DataValueField 属性设置为查找数据源中相关类别名称的 CategoryID 字段。当用户从列表中选择类别名称时,DropDownList 控件的 SelectedValue 属性将被设置为选定类别名称的类别 ID。
<asp:DropDownList ID="InsertCategoryDropDownList"
SelectedValue='<%# Bind("CategoryID") %>'
DataSourceID="CategoriesDataSource"
DataTextField="CategoryName"
DataValueField="CategoryID"
RunAt="Server" />
来源:http://msdn2.microsoft.com/zh-cn/library/ms178366(VS.80).aspx
Eval 和 Bind 的区别的更多相关文章
- Eval与Bind的区别
bind和eval都是ASP.NET中的函数,而且都有对将数据获取到Html中的功能.那么,它们在使用的时候有什么区别呢?在我们编程的时候,在某种情况下,用哪个函数更加合适呢? 区别 用法: 1. b ...
- C# Eval()和Bind()
Eval( " ")和Bind( " ") 这两种一个单向绑定,一个双向绑定,bind是双向绑定,但需数据源支持ASP.NET 2.0改善了模板中的数据绑定 ...
- Eval,Bind,<% %>,<%# %>和<%= %> 笔记
1.<% %>用来绑定后台代码 如: < % for(int i=0;i<100;i++) { Reaponse.Write(i.ToString()); } %> 2. ...
- javascript中apply、call和bind的区别,容量理解,值得转!
a) javascript中apply.call和bind的区别:http://www.cnblogs.com/cosiray/p/4512969.html b) 深入浅出 妙用Javascrip ...
- JS 中的this指向问题和call、apply、bind的区别
this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...
- js中call、apply和bind的区别
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对 ...
- this+call、apply、bind的区别与使用
http://www.ruanyifeng.com/blog/2018/06/javascript-this.html https://segmentfault.com/a/1190000018017 ...
- eval与exec的区别,以及变量的作用范围
# eval与exec的区别:eval 有返回值,而 exec没有返回值 # 这两个函数都是执行python语句,注意:里面传的是字符串的格式 a = eval('1+2') a # 这里a有值 3 ...
- 有关call和apply、bind的区别及this指向问题
call和apply都是解决this指向问题的方法,唯一的区别是apply传入的参数除了其指定的this对象之外的参数是一个数组,数组中的值会作为参数按照顺序传入到this指定的对象中. bind是解 ...
随机推荐
- ubuntu安装mysql多实例
想要尝试mysql的读写分离,在云上安装完mysql之后突然想到一个问题:我本机是没有公网IP的. 开始尝试在唯一一台云服务器上安装多个mysql实例. 主要步骤: 1.新建MySQL目录 (1):新 ...
- RPC之远程过程调用
一. 简介 将一个函数运行在远程计算机上并且等待获取那里的结果,这个称作远程过程调用(Remote Procedure Call)或者 RPC. RPC是一个计算机通信协议. 1. 类比: 将计算机服 ...
- xutils3批量上传文件
前几天开发安卓要用到文件批量上传,就是上传图片,视频,文件之类的用到Xutil3框架,用 RequestParams params = new RequestParams(url); params.a ...
- EJB 使用多个数据源问题
编辑 删除 如果在JBoss中同时使用俩个数据源就会发生如下异常: Transaction is not active: tx=TransactionImple < ac, BasicActio ...
- [Github筆記] 清除所有 Commit 紀錄
# 把原來的 git 移除掉 sudo rm .git -r # 初始化 git init git remote add origin https://github.com/username/repo ...
- 微信小程序开发系列六:微信框架API的调用
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
- 一个SAP开发人员的双截棍之路
由于种种原因,Jerry最近加入了SAP成都研究院的一个演讲俱乐部,这个俱乐部主要是提高大家的英语演讲能力. 说来Jerry也是大一下期和大二上期一次性高分通过四六级考试的,但是当毕业进入SAP成都研 ...
- 汇编4OPCODE
opcode原理 前缀域 切换操作数大小前缀 : 066h 可以将32位的操作数切换成16位的操作数 B8 00010000 | MOV EAX,0x100 66:B8 0001 | MOV ...
- python_使用qrcode生成二维码
1.功能 使用qrcode生成二维码 2.代码 #生成二维码: import qrcode #根据url生成二维码 def qrcodeWithUrl(url): img = qrcode.make( ...
- 关于websocket的代码,实现发送信息和监听信息(前端 后端(node.js))
文件结构 node.js代码 // 需要HTTP 模块来启动服务器和Socket.IOvar http= require('http');var fs = require('fs');// 在8080 ...