Author:Walkdan
本文假设你已经了解ASP 1.1的数据绑定(特别是Container这个局部变量)的机制,这里主要分析ASP 2.0数据绑定做了那些改进。
ASP.NET 2.0 的数据绑定函数Eval()简化掉了ASP 1.1神秘的Container.DataItem,比如数据绑定表达式:
<%# (Container.DataItem as DataRowView)["ProductName"].ToString() %>
ASP 1.1简化为:(去掉了类型指定, Eval通过反射实现,本文不再阐述)
<%# DataBinder.Eval(Container.DataItem, "ProductName").ToString() %>
ASP 2.0又简化为,去掉了Container局部变量:
<%# Eval("ProductName") %>
那么,Page.Eval()又是如何知道"ProductName"是那个数据的属性呢,即Container.DataItem真的消失了吗?
Eval()是Page的父类TemplateControl的方法
TemplateControl.Eval()可以自动计算出Container, 机制就是从一个dataBindingContext:Stack堆栈来获取。
1. 建立DataItem Container 栈:
在Control.DataBind()中,建立,这样可以保证子控件的DataItem Container始终在栈顶。
public class Control
{
protected virtual void DataBind(bool raiseOnDataBinding)
{
bool foundDataItem = false;
if (this.IsBindingContainer)
{
object o = DataBinder.GetDataItem(this, out foundDataItem);
if (foundDataItem)
Page.PushDataItemContext(o); <-- 将DataItem压入堆栈
}
try
{
if (raiseOnDataBinding)
OnDataBinding(EventArgs.Empty);
DataBindChildren(); <-- 绑定子控件
}
finally
{
if (foundDataItem)
Page.PopDataItemContext(); <-- 将DataItem弹出堆栈
}
}
}
2. 获取DataItem Container
public class Page
{
public object GetDataItem()
{
...
return this._dataBindingContext.Peek(); <-- 读取堆栈顶部的DataItem Container,就是正在绑定的DataItem Container
}
}
3. TemplateControl.Eval()
public class TemplateControl
{
protected string Eval (string expression, string format)
{
return DataBinder.Eval (Page.GetDataItem(), expression, format);
}
}
结论:从上面看出Page.Eval()在计算的时候还是引用了Container.DataItem,只不过这个DataItem通过DataItem Container堆栈自动计算出来的。我认为Page.Eval()看似把问题简化了,其实把问题搞得更加神秘。
分享到:
相关推荐
通过上述内容可以看出,ASP.NET 2.0中的数据绑定机制相较于之前的版本有了显著改进,无论是从简洁性、功能性还是安全性方面都有所增强。掌握这些高级技巧将有助于开发者更高效地进行Web应用开发,并能够更好地应对...
常见的数据绑定表达式有`<%# %>`,例如`<asp:Label Text='<%# Eval("ColumnName") %>' />`。 5. **母版页(Master Pages)** 母版页是ASP.NET 2.0中的布局工具,可以创建统一的头部、导航和页脚,提高网站的可维护性...
`Eval()`方法是ASP.NET内置的数据绑定表达式,它可以从`DataSource`属性中检索数据并将其转换为字符串。`Eval()`方法的基本语法如下: ```csharp Eval("propertyName") ``` 在这里,`propertyName`是你想要显示的...
本文主要介绍了C#环境下ASP.NET数据绑定的一些常用方法,包括`Eval`和`Bind`函数的使用。 #### 二、Eval与Bind概述 在ASP.NET中,`Eval`和`Bind`是两个常用的数据绑定方法。其中,`Eval`方法用于单向数据绑定,而`...
在***中进行数据绑定时,经常会使用Eval函数来展示数据源中的字段值。Eval函数是一个非常方便的工具,它...对于新手开发者来说,理解***的数据绑定机制和Eval函数的用途是掌握数据绑定的基础,也是解决类似问题的关键。
ASP.NET Eval是一个强大的数据绑定工具,特别是在ASP.NET 1.x版本到2.0的过渡中,它经历了一系列的改进,使得数据绑定变得更加简洁和易用。在本文中,我们将深入探讨ASP.NET Eval 2.0相对于1.1版本的改进,并理解其...
【Web 窗体页的数据绑定表达式】是ASP.NET Web开发中的一种核心特性,它允许开发者将网页上的控件属性与数据源关联起来,从而动态地显示和更新数据。这种绑定不是通过直接将控件属性与数据源连接,而是通过特定的...
8.2.3 Eval0方法和Bind()方法绑定数据 8.3 本章小结 第9章 GridView及其他数据控件的应用 9.1 GridView控件的应用 9.1.1 GridView控件的概述 9.1.2 使用GridView控件的绑定列绑定数据 9.1.3 使用GridView...
EVAL操作是ASP.NET中的一种绑定机制,可以将数据绑定到控件上,以便在页面上显示数据。Eval操作可以计算字符串,并绑定字段等功能。 在使用Eval操作时,需要注意以下几点: 1. 使用Bind()方法可以绑定字段,例如:...
这个基础教程主要由李勇平老师讲解,涵盖了ASP.NET 2.0的基础概念、页面编写和运行机制、页面请求和响应过程以及数据绑定的应用案例。 首先,ASP.NET 2.0中的页面是由`.aspx`文件构成的,这些文件可以包含HTML标记...
4. **计算和汇总**:内置了各种计算函数,如SUM、AVG、COUNT等,用于报表中的数据计算。 5. **图表和图形**:提供了丰富的图表类型,如柱状图、折线图、饼图等,用于数据可视化。 6. **交互式功能**:用户可以在运行...
`Eval`函数用于从当前数据项中检索字段值,并将其插入到控件的文本属性中。 6. **事件处理**: DataList还支持多种事件,如`ItemDataBound`(当每个数据项被绑定时触发)、`ItemCommand`(当用户点击按钮或链接时...
在ASP.NET开发中,DataBinder.Eval是一个非常重要的方法,用于在控件绑定数据时从数据源中动态地获取和显示数据。这个方法是ASP.NET数据绑定表达式的一部分,广泛应用于GridView、Repeater、ListView等数据绑定控件...
ASP.NET中的数据绑定允许开发者在页面上直接显示数据源中的数据,而无需手动处理数据。`Eval`方法是数据绑定表达式的一部分,它接受一个字段名或表达式,返回对应数据源的值。 2. **DBNull和空值检查**: 在处理...
在ASP.NET 2.0开发中,GridView控件是一个非常重要的数据展示组件,它能够方便地展示数据库或其他数据源中的数据,并提供了丰富的功能,如排序、分页、筛选等。本教程聚焦于第六章的第六节,主题是“GridView控件...
在模板化控件中绑定到数据 FormView、DataList、Repeater 和 ListView Web 服务器控件使用模板显示数据和检索用户输入,...然后可以在模板中使用 Eval 和 Bind 函数绑定到数据源中的数据。有关更多信息,请参见 数据绑
### ASP.NET Repeater绑定时使用函数 #### 一、ASP.NET Repeater简介 在ASP.NET Web应用程序开发中,`Repeater`控件是一种非常灵活且功能强大的数据绑定控件,它能够以高度自定义的方式显示数据集合。与`GridView`...
2. **数据绑定函数**: - `DataBind`:将数据源绑定到控件,如GridView或Repeater。 - `Eval`和`Bind`:在模板字段中用于显示数据源中的值,`Eval`只读,`Bind`支持双向绑定。 3. **控件事件处理函数**: - `...
ASP.NET提供了多种数据绑定技术,如DataBinder.Eval()和DataBinder.Bind(),用于从数据源中提取数据并显示在控件上。此外,控件如GridView、ListView等还支持 declarative data binding,允许在标记中直接绑定数据源...
在这个概要中,我们将探讨数据绑定的基本概念,以及如何使用数据绑定表达式,包括`<%# %>`语法,以及`Eval`和`Bind`函数的应用。 首先,ASP.NET引入了一种声明性语法`<%# %>`,这是在.aspx页面中进行数据绑定的基础...