`
glacier3
  • 浏览: 384864 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

揭秘ASP.NET 2.0的Eval方法

阅读更多

实际上Eval方法是TemplateControl的,而System.Web.UI.Page和System.Web.UI.UserControl都继承于TemplateControl,所以我们可以在Page和UserControl上直接调用个方法。

Page.Eval方法可以帮助我们更好的撰写数据绑定表达式,在ASP.NET 1.x时代,数据绑定表达式的一般形式是:

<%# DataBinder.Eval( Container , “DataItem.Name”) %>

而在ASP.NET 2.0中,同样的代码,我们可以这样写:

<%# Eval( “Name” )%>

ASP.NET 2.0是怎么实现的呢?我们先从Eval方法来研究,通过反射.NET Framework 2.0类库的源代码,我们可以看到这个方法是这样实现的:

protected internal object Eval(string expression)

{

this.CheckPageExists();

return DataBinder.Eval(this.Page.GetDataItem(), expression);

}

第一行我们不必管,这是检查调用的时候有没有Page对象的,如果没有则会抛出一个异常。

关键是第二行:

return DataBinder.Eval(this.Page.GetDataItem(), expression);

Page.GetDataItem()也是2.0中新增的一个方法,用途是正是取代ASP.NET 1.x中的Container.DataItem。

看来不摸清楚GetDataItem()方法,我们也很难明白Eval的原理。GetDataItem的实现也很简单:

public object GetDataItem()

{

if ((this._dataBindingContext == null) || (this._dataBindingContext.Count == 0))

{

throw new InvalidOperationException(SR.GetString("Page_MissingDataBindingContext"));

}

return this._dataBindingContext.Peek();

}

我们注意到了有一个内部对象_dataBindingContext,通过查源代码发现这是一个Stack类型的东西。所以他有Peek方法。而这一段代码很容易看懂,先判断这个Stack是否被实例化,然后,判断这个Stack里面是不是有任何元素,如果Stack没有被实例化或者没有元素则抛出一个异常。最后是将这个堆栈顶部的元素返回。

ASP.NET 2.0用了一个Stack来保存所谓的DataItem,我们很快就查到了为这个堆栈压元素和弹出元素的方法:Control.DataBind方法:

protected virtual void DataBind(bool raiseOnDataBinding)

{

bool flag1 = false;//这个标志的用处在上下文中很容易推出来,如果有DataItem压栈,则在后面出栈。

if (this.IsBindingContainer)//判断控件是不是数据绑定容器,实际上就是判断控件类是不是实现了INamingContainer

{

bool flag2;

object obj1 = DataBinder.GetDataItem(this, out flag2);//这个方法是判断控件是不是有DataItem属性,并把它取出来。

if (flag2 && (this.Page != null))//如果控件有DataItem

{

this.Page.PushDataBindingContext(obj1);//把DataItem压栈,PushDataBindingContext就是调用_dataBindingContext的Push方法

flag1 = true;

}

}

try

{

if (raiseOnDataBinding)//这里是判断是不是触发DataBinding事件的。

{

this.OnDataBinding(EventArgs.Empty);

}

this.DataBindChildren();//对子控件进行数据绑定,如果这个控件有DataItem,则上面会将DataItem压入栈顶,这样,在子控件里面调用Eval或者GetDataItem方法,就会把刚刚压进去的DataItem给取出来。

}

finally

{

if (flag1)//如果刚才有压栈,则现在弹出来。

{

this.Page.PopDataBindingContext();//PopDataBindingContext就是调用_dataBindingContext的Pop方法

}

}

}

至此,我们已经可以完全了解ASP.NET 2.0中GetDataIten和Eval方法运作的原理了,下一次我打算研究ASP.NET 2.0中的新的Bind语法。

有提供Bind语法资料的和提出好建议的酌情给分,up、顶等分会很少,接分者无分。

分享到:
评论

相关推荐

    揭秘ASP.NET 2.0的Eval方法.doc

    ### 揭秘ASP.NET 2.0的Eval方法 #### 一、Eval方法概述 在ASP.NET 2.0中,Eval方法是一个重要的特性,它简化了数据绑定的语法,使得开发者能够更加灵活地处理数据绑定操作。Eval方法最初定义在`TemplateControl`类...

    ASP.NET 2.0快速入门(2):ASP.NET 2.0 数据绑定

    ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它极大地简化了Web开发过程,特别是对于数据驱动的应用程序。在这个快速入门教程中,我们将深入探讨ASP.NET 2.0的数据绑定机制,这是创建动态网页的关键部分...

    ASP.NET 2.0快速入门(7):ASP.NET 2.0 数据绑定的基本技巧

    ASP.NET 2.0支持一种特殊的语法,称为数据绑定表达式,如`&lt;%# Eval("FieldName") %&gt;`,它可以用来从数据源中获取值并显示在页面上。 7. **数据操作** GridView不仅支持显示数据,还允许用户编辑、插入和删除数据...

    超酷的Asp.net2.0留言板.zip

    这个"超酷的Asp.net2.0留言板"可能是基于该版本的ASP.NET技术实现的一个示例应用,旨在展示如何在网站上创建交互式的用户交流平台。下面,我们将深入探讨Asp.NET 2.0的一些核心特性及其在留言板应用中的应用。 1. *...

    ASP.NET 2.0入门与提高系列课程(4):ASP.NET 2.0数据绑定

    ASP.NET 2.0是微软推出的Web应用程序开发框架,它极大地简化了Web应用的构建过程。本系列课程的第四部分重点讲解ASP.NET 2.0中的数据绑定技术,这是一个核心概念,对于创建动态、交互式的网页至关重要。数据绑定允许...

    ASP.NET 2.0快速入门(9):ASP.NET 2.0 数据绑定高级技巧

    ASP.NET 2.0 是微软推出的Web应用程序开发框架,它为开发者提供了强大的工具和功能,使得构建动态网站、Web应用程序和服务变得更加便捷。本教程重点聚焦于ASP.NET 2.0中的数据绑定高级技巧,这对于创建数据驱动的...

    微软asp.net2.0快速入门第二节

    ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它是在ASP.NET 1.x的基础上进行了一系列改进和增强的版本。本节主要聚焦于ASP.NET 2.0的数据绑定,这是构建动态网站和Web应用程序的核心技术之一,用于将...

    ASP.NET 2.0 数据绑定

    ### ASP.NET 2.0 数据绑定 #### 一、ASP.NET 2.0简介 ASP.NET 2.0是微软发布的一个用于构建动态Web应用程序的框架。它建立在.NET Framework之上,提供了许多新功能和改进,使开发人员能够更轻松地创建高性能、可...

    ASP.NET+2.0+数据绑定高级技巧 pdf

    - **ASP.NET 2.0中的简化表达式**:在新版框架中,我们可以直接使用`Eval`函数,这使得代码更加简洁明了。 ```html &lt;%# Eval("Price") %&gt; ``` - **XML数据绑定**:新增的XML数据绑定功能允许开发者直接使用...

    Web应用开发ASP.NET2.0课后习题答案

    ASP.NET 2.0是微软推出的用于构建动态网站、web应用程序和web服务的框架,它在.NET Framework 2.0的基础上提供了丰富的功能和改进。在《Web应用开发ASP.NET 2.0》这门课程中,学生将学习如何利用这个强大的工具来...

    ASP.NET 2.0 入门与提高 陈锐老师课程系列四

    【ASP.NET 2.0 入门与提高】 ASP.NET 2.0是微软开发的一款用于构建Web应用程序的框架,它是.NET Framework的一部分。这个框架在2005年发布,相较于1.1版本,带来了许多增强和新特性,旨在简化开发过程并提高效率。...

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

    ASP.NET 2.0+SQL Server 2005全程指南 目录 基础篇 第1章 ASP.NET概述及环境配置 1.1 认识ASRNET 1.1.1 .NET Framework框架 1.1.2 ASP.NET功能与特性 1.1.3 ASP.NET与ASP的区别 1.2 搭建ASP.NET开发环境 1.2.1...

    ASP.NET 2.0与数据库连接范例

    ASP.NET 2.0是微软开发的一个用于构建动态网站、Web应用程序和服务的框架。它提供了丰富的功能和工具,使得开发者可以高效地创建交互式的、数据驱动的网页。在这个"ASP.NET 2.0与数据库连接范例"中,我们将探讨如何...

    在ASP.NET 2.0中实现数据的绑定

    ASP.NET 2.0是微软开发的一个Web应用程序框架,它为开发者带来了许多增强的功能和改进,尤其是在数据绑定方面。在ASP.NET 2.0中,数据绑定成为了一种更为强大和灵活的技术,允许开发者更轻松地处理数据源,提供排序...

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

    这个"asp.net2.0常用代码及常用函数"的资源包显然包含了开发者在实践中经常使用的代码片段和函数集,对于理解和提升ASP.NET 2.0编程技能大有裨益。 1. **页面生命周期与事件处理** ASP.NET 2.0中的页面生命周期...

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

    综上所述,ASP.NET 2.0基础教程主要讲解了如何使用C#开发ASP.NET Web应用程序,包括页面结构、代码编写方式、运行时行为和数据交互方法。学习这些内容对于理解ASP.NET应用程序的工作原理以及开发动态web应用至关重要...

Global site tag (gtag.js) - Google Analytics