一起谈.NET技术,ASP.NET Eval如何进行数据绑定
ASP.NET Eval在数据绑定方面的应用是众所周知的,不过技术在发展,当ASP.NET Eval 1.1变成ASP.NET Eval 2.0的时候,在操作的时候会有什么变化呢?
假设你已经了解ASP.NET Eval 1.1的数据绑定(特别是Container这个局部变量)的机制,这里主要分析ASP.NET Eval 2.0数据绑定做了那些改进。
ASP.NET Eval 2.0 的数据绑定函数Eval()简化掉了ASP.NET Eval 1.1神秘的Container.DataItem,比如数据绑定表达式:
ASP.NET Eval 1.1简化为:(去掉了类型指定, Eval通过反射实现,本文不再阐述)
ASP.NET Eval 2.0又简化为,去掉了Container局部变量:
那么,Page.Eval()又是如何知道"ProductName"是那个数据的属性呢,即Container.DataItem真的消失了吗?
ASP.NET Eval()是Page的父类TemplateControl的方法
TemplateControl.Eval()可以自动计算出Container, 机制就是从一个dataBindingContext:Stack堆栈来获取。
1. 建立DataItem Container 栈:
在Control.DataBind()中,建立,这样可以保证子控件的DataItem Container始终在栈顶。
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 object GetDataItem()
{ ... return this._dataBindingContext.Peek();
<-- 读取堆栈顶部的DataItem Container,就是正在绑定的DataItem
Container
}
}
3. TemplateControl.Eval()
protected string Eval (string expression, string format)
{ return DataBinder.Eval (Page.GetDataItem(), expression, format);
}
}
结论:
从上面看出Page.Eval()在计算的时候还是引用了Container.DataItem,只不过这个DataItem通过DataItem Container堆栈自动计算出来的。我认为Page.Eval()看似把问题简化了,其实把问题搞得更加神秘。
转载于:https://www.cnblogs.com/waw/archive/2011/09/02/2162980.html
一起谈.NET技术,ASP.NET Eval如何进行数据绑定相关推荐
- ASP.NET Eval如何进行数据绑定
ASP.NET Eval在数据绑定方面的应用是众所周知的,不过技术在发展,当ASP.NET Eval 1.1变成ASP.NET Eval 2.0的时候,在操作的时候会有什么变化呢? 假设你已经了解AS ...
- 一起谈.NET技术,asp.net控件开发基础(20)
上面我们讨论了数据绑定控件的做法,但都未涉及到asp.net2.0中数据源控件的用法,让用惯了数据源控件的人可能感觉不适应.这次我们就开始讨论在asp.net2.0中,我们该如何重新定义数据绑定控件. ...
- Asp.net Eval 学习总结
C# Eval在asp.net中的用法及作用 https://www.cnblogs.com/Mr_JinRui/archive/2010/07/06/1772129.html Eval( " ...
- 浅谈虚拟化技术下的云安全如何处置
浅谈虚拟化技术下的云安全如何处置 近年来,云计算是目前非常热门的一个研究领域,其实它并不是一种全新的技术,而是许多技术的融合体,包括分布式计算.动态和拓展等各种各样的技术算法,而虚拟化技术是云计算里最 ...
- 技术创业需胆识 谈IT技术人员的创业 (http://www.cnblogs.com/dudu/archive/2007/05/27/761740.html)...
技术创业需胆识 谈IT技术人员的创业 作者:李立辉 我自己介绍一下:本人96年西点毕业,学的是无线通信,柳传志是我的校友,后来分配到北京巨龙做交换机,98年去了深圳中兴,当时看到中兴日益强大,和华为的 ...
- 浅谈.NET技术公司的实习生培养
浅谈.NET技术公司的实习生培养 背景 近几年.NET开发者市场的越发不景气,一毕业就选择.NET技术的开发者更是少之又少.一方面是公司效益的日益提高,一方面却是招聘优秀人才的速度总是赶不上公司发展的 ...
- 以计算机谈人文科学,阅读下面一段文字,完成问题 自20世纪80年代以来,世界都在谈“软科学技术”,何谓软科学?经常听人说:“脑子不够使。”这其实就是对软科学的需求。于是,从古至今,...
阅读下面一段文字,完成问题 自20世纪80年代以来,世界都在谈"软科学技术",何谓软科学?经常听人说:"脑子不够使."这其实就是对软科学的需求.于是,从古至今, ...
- 浅谈Hybrid技术的设计与实现【转】
https://www.cnblogs.com/yexiaochai/p/4921635.html 前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术 ...
- 浅谈Hybrid技术的设计与实现第二弹
前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹--落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...
最新文章
- vue 循环 递归组件_全局组件实现递归树,避免循环引用
- 简单的字幕效果html,7种HTML5 Figure图片字幕标题特效
- 删除文件夹下所有的文件_VB删除文件和文件夹的方法
- Oracle 制造死锁和查询死锁
- k8s | 搞不明白为什么大家都在学习 k8s
- 委派控制-将计算机加入域
- thinkphp中的__DIR__ __ROOT__ __APP__ __MODULE__ APP_PATH LIB_PATH MODULE_PATH 等是在哪里定义的?...
- msysgit+apache安装说明 - gitweb服务器部分
- 由数据范围反推算法复杂度
- Atitit.软件gui按钮and面板---通讯子系统(区)-- github 的使用....
- 制作自启动的MSDN简体中文版和英文版win98ISO镜像
- 我是如何自学C语言的(一个菜鸟的学习路)
- 滑动窗口协议如何实现流量控制
- 机器人仿真论文阅读2
- 腾讯元老、上市公司CTO辞职后,每天对着200亩地发呆
- vnc远程控制软件官网,值得一用的5款vnc远程控制软件官网
- windows10任务栏一直转圈-无法操作假死状态
- Musical Christmas Lights——一个圣诞树灯光✨随音乐节奏改变的前端开源项目
- 【面经】兴业证券大数据工程师面经
- 哼唱识别(query by humming)