`
wjm901215
  • 浏览: 154090 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ASP 2.0 数据绑定函数Eval()的机制

阅读更多
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+数据绑定高级技巧 pdf

    通过上述内容可以看出,ASP.NET 2.0中的数据绑定机制相较于之前的版本有了显著改进,无论是从简洁性、功能性还是安全性方面都有所增强。掌握这些高级技巧将有助于开发者更高效地进行Web应用开发,并能够更好地应对...

    asp.net2.0常用代码及常用函数

    常见的数据绑定表达式有`&lt;%# %&gt;`,例如`&lt;asp:Label Text='&lt;%# Eval("ColumnName") %&gt;' /&gt;`。 5. **母版页(Master Pages)** 母版页是ASP.NET 2.0中的布局工具,可以创建统一的头部、导航和页脚,提高网站的可维护性...

    在Web控件模板中使用Eval()方法绑定数据

    `Eval()`方法是ASP.NET内置的数据绑定表达式,它可以从`DataSource`属性中检索数据并将其转换为字符串。`Eval()`方法的基本语法如下: ```csharp Eval("propertyName") ``` 在这里,`propertyName`是你想要显示的...

    C# aspx数据绑定方法集.doc

    本文主要介绍了C#环境下ASP.NET数据绑定的一些常用方法,包括`Eval`和`Bind`函数的使用。 #### 二、Eval与Bind概述 在ASP.NET中,`Eval`和`Bind`是两个常用的数据绑定方法。其中,`Eval`方法用于单向数据绑定,而`...

    asp.net 数据绑定 使用eval 时候报 字符文本中的字符太多 问题的解决方法

    在***中进行数据绑定时,经常会使用Eval函数来展示数据源中的字段值。Eval函数是一个非常方便的工具,它...对于新手开发者来说,理解***的数据绑定机制和Eval函数的用途是掌握数据绑定的基础,也是解决类似问题的关键。

    ASP.NET Eval进行数据绑定的方法

    ASP.NET Eval是一个强大的数据绑定工具,特别是在ASP.NET 1.x版本到2.0的过渡中,它经历了一系列的改进,使得数据绑定变得更加简洁和易用。在本文中,我们将深入探讨ASP.NET Eval 2.0相对于1.1版本的改进,并理解其...

    Web 窗体页的数据绑定表达式

    【Web 窗体页的数据绑定表达式】是ASP.NET Web开发中的一种核心特性,它允许开发者将网页上的控件属性与数据源关联起来,从而动态地显示和更新数据。这种绑定不是通过直接将控件属性与数据源连接,而是通过特定的...

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    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操作集合 包含Eval()的一些常用操作 常用函数

    EVAL操作是ASP.NET中的一种绑定机制,可以将数据绑定到控件上,以便在页面上显示数据。Eval操作可以计算字符串,并绑定字段等功能。 在使用Eval操作时,需要注意以下几点: 1. 使用Bind()方法可以绑定字段,例如:...

    ASP.NET2.0(C#)基础教程 李勇平老师的ppt课件 char2

    这个基础教程主要由李勇平老师讲解,涵盖了ASP.NET 2.0的基础概念、页面编写和运行机制、页面请求和响应过程以及数据绑定的应用案例。 首先,ASP.NET 2.0中的页面是由`.aspx`文件构成的,这些文件可以包含HTML标记...

    vb activereports2.0

    4. **计算和汇总**:内置了各种计算函数,如SUM、AVG、COUNT等,用于报表中的数据计算。 5. **图表和图形**:提供了丰富的图表类型,如柱状图、折线图、饼图等,用于数据可视化。 6. **交互式功能**:用户可以在运行...

    DataList数据绑定

    `Eval`函数用于从当前数据项中检索字段值,并将其插入到控件的文本属性中。 6. **事件处理**: DataList还支持多种事件,如`ItemDataBound`(当每个数据项被绑定时触发)、`ItemCommand`(当用户点击按钮或链接时...

    [ASP_NET]DataBinder_Eval用法_學習 積累 進步

    在ASP.NET开发中,DataBinder.Eval是一个非常重要的方法,用于在控件绑定数据时从数据源中动态地获取和显示数据。这个方法是ASP.NET数据绑定表达式的一部分,广泛应用于GridView、Repeater、ListView等数据绑定控件...

    ASP.net开发出用函数

    ASP.NET中的数据绑定允许开发者在页面上直接显示数据源中的数据,而无需手动处理数据。`Eval`方法是数据绑定表达式的一部分,它接受一个字段名或表达式,返回对应数据源的值。 2. **DBNull和空值检查**: 在处理...

    asp.net2.0系列教程第6章_第6节

    在ASP.NET 2.0开发中,GridView控件是一个非常重要的数据展示组件,它能够方便地展示数据库或其他数据源中的数据,并提供了丰富的功能,如排序、分页、筛选等。本教程聚焦于第六章的第六节,主题是“GridView控件...

    总结Visual Studio下ASP.NET模板化控件中的数据绑定

    在模板化控件中绑定到数据 FormView、DataList、Repeater 和 ListView Web 服务器控件使用模板显示数据和检索用户输入,...然后可以在模板中使用 Eval 和 Bind 函数绑定到数据源中的数据。有关更多信息,请参见 数据绑

    asp.net Repeater绑定时使用函数

    ### ASP.NET Repeater绑定时使用函数 #### 一、ASP.NET Repeater简介 在ASP.NET Web应用程序开发中,`Repeater`控件是一种非常灵活且功能强大的数据绑定控件,它能够以高度自定义的方式显示数据集合。与`GridView`...

    Asp.net常用函数表

    2. **数据绑定函数**: - `DataBind`:将数据源绑定到控件,如GridView或Repeater。 - `Eval`和`Bind`:在模板字段中用于显示数据源中的值,`Eval`只读,`Bind`支持双向绑定。 3. **控件事件处理函数**: - `...

    asp.net常用函数

    ASP.NET提供了多种数据绑定技术,如DataBinder.Eval()和DataBinder.Bind(),用于从数据源中提取数据并显示在控件上。此外,控件如GridView、ListView等还支持 declarative data binding,允许在标记中直接绑定数据源...

    ASP.NET框架中的数据绑定概要与数据绑定表达式的使用

    在这个概要中,我们将探讨数据绑定的基本概念,以及如何使用数据绑定表达式,包括`&lt;%# %&gt;`语法,以及`Eval`和`Bind`函数的应用。 首先,ASP.NET引入了一种声明性语法`&lt;%# %&gt;`,这是在.aspx页面中进行数据绑定的基础...

Global site tag (gtag.js) - Google Analytics