国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

ASP 2.0 數(shù)據(jù)綁定函數(shù)Eval()的機(jī)制

2019-11-18 17:09:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

 asp.net 2.0 的Eval()簡(jiǎn)化了掉了ASP 1.1 Container.DataItem,比如:

 <%# (Container.DataItem as DataRowView)["

 簡(jiǎn)化為:(去掉了類(lèi)型指定 ASP 1.1, Eval通過(guò)反射實(shí)現(xiàn),本文不再闡述)
 <%# DataBinder.Eval(Container.DataItem, "ProductName").ToString() %>      

 又簡(jiǎn)化為(ASP 2.0):
 <%# Eval("ProductName") %>
 
 Eval()是TemplateControl:Page 的方法
 TemplateControl.Eval()可以自動(dòng)計(jì)算出Container, 機(jī)制就是從一個(gè)dataBindingContext:Stack堆棧來(lái)獲取。
 
 1. 建立DataItem Container 棧:
    在Control.DataBind()中,建立,這樣可以保證子控件的DataItem Container始終在棧頂。
   
    public class Control
    {
        protected virtual void DataBind(bool rai
SEOnDataBinding)
        {
            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);   
        }
    }


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 奉贤区| 高唐县| 平昌县| 琼结县| 麻江县| 津市市| 赤峰市| 永德县| 化隆| 海门市| 泌阳县| 德惠市| 通州市| 长宁县| 潜江市| 汪清县| 平潭县| 凤城市| 德阳市| 邹平县| 麟游县| 安福县| 平和县| 子洲县| 东辽县| 讷河市| 丹江口市| 察隅县| 鄂托克旗| 淳安县| 舞阳县| 钦州市| 瑞昌市| 苏州市| 平凉市| 庆安县| 平舆县| 屏南县| 广河县| 册亨县| 楚雄市|