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

2016-02-19 15:30 3 1 收藏

下面图老师小编要跟大家分享ASP 2.0 数据绑定函数Eval()的机制,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - Web开发 】

  Author: Walkdan (walkdan(at)gmail.com)

   ASP.NET 2.0 的Eval()简化了掉了ASP 1.1 Container.DataItem,比如:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

   %# (Container.DataItem as DataRowView)["ProductName"].ToString() %      

   简化为:(去掉了类型指定 ASP 1.1, Eval通过反射实现,本文不再阐述)
   %# DataBinder.Eval(Container.DataItem, "ProductName").ToString() %      

   又简化为(ASP 2.0):
   %# Eval("ProductName") %
   
   Eval()是TemplateControl:Page 的方法
   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. TemplateContro.Eval()
      public class TemplateControl
      {
          protected string Eval (string expression, string format)
          {
              return DataBinder.Eval (Page.GetDataItem(), expression, format);   
          }
      }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

来源:http://www.tulaoshi.com/n/20160219/1609771.html

延伸阅读
标签: ASP
  <% 'ASP字数计算函数 Function WordCount(strInput)     Dim strTemp     strTemp = Replace(strInput, vbTab, " ")     strTemp = Replace(strTemp, vbCr, " ")     strTemp = Replace(strTemp, vbLf, " ")     ' 删除字首字尾空格   &nbs...
标签: Web开发
ASP函数库 % ''''                   函数目录                    '''' '''...
标签: Web开发
创建带有数据的互动网页很简单,只需通过拖拉,设置属性并储存页面即可,并不需要编程,不过Visual InterDev提供了一个完整的对象模型,可让你调整应用程序,进行用户确认并控制Web应用程序,也支持DHTML及IE4数据控制以获得更丰富的用户界面,要生成一个使用数据控件创建的简单数据输入页面的步骤如下: (1),在创建一个新的数据连接后,将...
标签: ASP
  大家有碰到过要想取一字符串里的某些值而无从下手?有没有觉得看书或教材对split的写法糊里糊涂……如果有此疑问的话,请看下面我对例子的解释,相信您会对这个有一定的了解。 我先介绍一下Split函数的用法: 返回值数组 = Split("字符串","分割符") 假设变量strURL保存着URL值,如strURL = "ftp://username:password...
标签: Web开发
《JavaScript语言精髓与编程实践》的读者I22141提出了一问题:为什么下面这段代码在JScript和SpiderMonkey中表现不一样: -------- var func = eval("(function(){})"); alert(typeof func); -------- 更进一步的问题是,书中对匿名和具名函数在JScript与SpiderMonkey中的表现解释得不够清楚。好的,这篇文章就这个...

经验教程

263

收藏

18
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部