ASP.NET中的Bind和Eval的区别详解
来源:互联网 发布:特蕾莎修女 知乎 编辑:程序博客网 时间:2024/06/05 18:12
eval()方法在运行时使用反射执行后期绑定计算,因此与标准的ASP.NET数据绑定方法bind相比,会导致性能明显下降。它一般用在绑定时需要格式化字符串的情况下。多数情况尽量少用此方法
Eval 方法是静态(只读)方法,该方法采用数据字段的值作为参数并将其作为字符串返回。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(Container.DataItem, "Item.Product.Id") %>
其中的数据源为IList<LineItem>,各个类的关系为:
格式字符串参数是可选的。如果它被忽略,DataBinder.Eval 将返回类型对象的值,如下面的示例所示:
<%# (bool)DataBinder.Eval(Container.DataItem, "BoolValue") %>
当对模板化列表中的控件进行数据绑定时,DataBinder.Eval 特别有用,因为数据行和数据字段通常都必须强制转换。
Eval和Bind的格式化字符串所处位置不同,以下举出几个例子:
1.Eval是单向取值,既可以使用系统定义的函数格式化,也可以调用自己定义的格式化函数(如例子中的MyFormatFunction函数)。
<%# string.Format("{0:yyyy-MM-dd}",Eval("BirthDate")) %>
<%# MyFormatFunction(Eval("BirthDate")) %>
2.Bind是双向的,格式化字符串既被用于格式化显示,又要作为数据输入验证。
<%# Bind("BirthDate","{0:yyyy-MM-dd}") %>
<%# Bind("Birthday","{0:M.d}") %>
DataFormatString="{0:格式字符串}"
1、时间格式化:{0:yyyy-MM-dd}
//绑定日期字段格式字符串
<%# Convert.ToDateTime(((System.Data.DataRowView)Container.DataItem)["FbTime"]).ToString("yyyy年MM月dd日") %>
<%# DataBinder.Eval(Container, "DataItem.FbTime","{0:yyyy年MM月dd日}") %>
//字符串绑定超过指定长度截断
<%# DataBinder.Eval(Container.DataItem, "Text").ToString().Trim().Length>7?DataBinder.Eval(Container.DataItem, "Text").ToString().Trim().Substring(0,7):DataBinder.Eval(Container.DataItem, "Text").ToString().Trim() %>
2、格式数字字符串 输入 结果
"{0:C}" 12345.6789 $12,345.68
"{0:C}" -12345.6789 ($12,345.68)
"{0:D}" 12345 12345
"{0:D8}" 12345 00012345
"{0:E}" 12345.6789 1234568E+004
"{0:E10}" 12345.6789 1.2345678900E+004
"{0:F}" 12345.6789 12345.68
"{0:F0}" 12345.6789 12346
"{0:G}" 12345.6789 12345.6789
"{0:G7}" 123456789 1.234568E8
"{0:N}" 12345.6789 12,345.68
"{0:N4}" 123456789 123,456,789.0000
"Total: {0:C}" 12345.6789 Total: $12345.68
DataFormatString="{0:P}" //自动转换为百分数
C 以货币格式显示数值。0
12345.ToString("C"); //生成 ¥12,345.00
D 以十进制格式显示数值。
E 以科学记数法(指数)格式显示数值。
//价格格试化为2位小数
<%# Convert.ToDecimal(((System.Data.DataRowView)Container.DataItem) ["Price"]).ToString("F2") %>
<%# DataBinder.Eval(Container, "DataItem.Price","{0:F2}") %>
F 以固定格式显示数值。
G 以常规格式显示数值。
N 以数字格式显示数值。
X 以十六进制格式显示数值。
12345.ToString("p"); //生成 1,234,500.00%
- ASP.NET中的Bind和Eval的区别详解
- ASP.NET中的Bind和Eval的区别详解
- ASP.NET中的Bind和Eval的区别详解
- 在asp.net中Bind和Eval的区别详解
- asp.net中的Bind和Eval的区别
- asp.net bind()和eval()的区别
- ASP.NET中的Bind和Eval有什么区别
- asp.net中Bind和Eval的有什么区别
- asp.net中Bind和Eval的区别
- Asp.net中Bind和Eval的区别详细说明
- asp.net初级接触-Eval和Bind的区别
- Asp.net中Bind和Eval的区别详细说明
- Asp.net中Bind和Eval的区别详细说明
- ASP.NET中数据绑定的Eval 和 bind 的区别及数据绑定中的操作
- ASP.net TemplateField模板中的bind方法和Eval方法的区别
- .NET中Bind和Eval的区别
- .NET中Bind和Eval的区别
- .NET中Bind和Eval的区别
- Project Euler – Problem 19
- 认识.Net
- 多态总结
- linux通过c语言编程访问远程mysql
- Project Euler – Problem 20
- ASP.NET中的Bind和Eval的区别详解
- Project Euler – Problem 21
- 交叉编译mysql客户端libmysql
- Ubuntu_eclipse配置安装
- 公元历法探究之------闰年
- Project Euler – Problem 22
- CAS压力及疲劳测试
- Project Euler – Problem 23
- css 特效