欢迎光临
我们一直在努力

asp 2.0 数据绑定函数eval()的机制_asp.net技巧

建站超值云服务器,限时71元/月

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


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


 <%# (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);   
        }
    }

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » asp 2.0 数据绑定函数eval()的机制_asp.net技巧
分享到: 更多 (0)