特色栏目

ASP源码

PHP源码

.NET源码

JSP源码

游戏频道
专题合集
关闭菜单
首页> ASP.NET教程> ASP 2.0 数据绑定函数Eval()的机制

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

时间:2009-06-30 16:36:01 作者:互联网

Author: Walkdan (walkdan(at)gm***.com)

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

 <%# (Co***iner.DataItem as DataRowView)["ProductName"].ToString() %>      

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

 又简化为(ASP 2.0):
 <%# Eval("ProductName") %>
 
 Eval()是TemplateControl:Page 的方法
 Te***ateControl.Eval()可以自动计算出Container, 机制就是从一个dataBindingContext:Stack堆栈来获取。
 
 1. 建立DataItem Container 栈:
    在Co***ol.DataBind()中,建立,这样可以保证子控件的DataItem Container始终在栈顶。
   
    public class Control
    {
        protected virtual void DataBind(bool raiseOnDataBinding)
        {
            bool foundDataItem = false;
            if (th***IsBindingContainer)
            {
                object o = Da***inder.GetDataItem(this, out foundDataItem);
                if (foundDataItem)
                    Pa***PushDataItemContext(o);        <-- 将DataItem压入堆栈
            }
            try
            {
                if (raiseOnDataBinding)
                    OnDataBinding(Ev***Args.Empty);
                   
                DataBindChildren();                     <-- 绑定子控件
            }
            finally
            {
                if (foundDataItem)
                    Pa***PopDataItemContext();          <-- 将DataItem弹出堆栈
            }
        }
    }

  2. 获取DataItem Container
    public class Page
    {   
        public object GetDataItem()
        {
            ...
            return th***_dataBindingContext.Peek();     <-- 读取堆栈顶部的DataItem Container,就是正在绑定的DataItem Container
        }
     }
    
   3. Te***ateContro.Eval()
    public class TemplateControl
    {
        protected string Eval (string expression, string format)
        {
            return Da***inder.Eval (Pa***GetDataItem(), expression, format);   
        }
    }

相关文章 最新文章

相关应用

热门文章

猜你喜欢

返回顶部