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

萌萌哒超超

萌萌哒超超

2016-02-19 15:30

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

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

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

(本文来源于图老师网站,更多请访问https://m.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弹出堆栈
              }
          }
      }

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

    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);   
          }
      }

展开更多 50%)
分享

猜你喜欢

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

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

javascript之eval函数

Web开发
javascript之eval函数

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Eval与EvalAssign函数的应用

设计软件 平面设计软件 广告设计软件
Eval与EvalAssign函数的应用

asp+ 利用数据绑定来处理XML文件

电脑网络
asp+ 利用数据绑定来处理XML文件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

实用的ASP连接数据库的函数

Web开发
实用的ASP连接数据库的函数

ASP分页函数

ASP
ASP分页函数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

使用Data Access Application Block 得到存储过程的返回值

使用Data Access Application Block 得到存储过程的返回值

像个疯子一般 边哭边笑 - QQ情侣分组

像个疯子一般 边哭边笑 - QQ情侣分组
下拉加载更多内容 ↓