下面图老师小编要跟大家分享ASP 2.0 数据绑定函数Eval()的机制,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!
【 tulaoshi.com - Web开发 】
Author: Walkdan (walkdan(at)gmail.com)
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)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/n/20160219/1609771.html
看过《ASP 2.0 数据绑定函数Eval()的机制》的人还看了以下文章 更多>>