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

首頁 > 編程 > ASP > 正文

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

2024-05-04 11:06:37
字體:
供稿:網(wǎng)友

最大的網(wǎng)站源碼資源下載站,

  本文假設(shè)你已經(jīng)了解asp 1.1的數(shù)據(jù)綁定(特別是container這個(gè)局部變量)的機(jī)制,這里主要分析asp 2.0數(shù)據(jù)綁定做了那些改進(jìn)。

  asp.net 2.0 的數(shù)據(jù)綁定函數(shù)eval()簡(jiǎn)化掉了asp 1.1神秘的container.dataitem,比如數(shù)據(jù)綁定表達(dá)式:

<%# (container.dataitem as datarowview)["productname"].tostring() %>

  asp 1.1簡(jiǎn)化為:(去掉了類型指定, eval通過反射實(shí)現(xiàn),本文不再闡述)

<%# databinder.eval(container.dataitem, "productname").tostring() %>

  asp 2.0又簡(jiǎn)化為,去掉了container局部變量:

<%# eval("productname") %>
  那么,page.eval()又是如何知道"productname"是那個(gè)數(shù)據(jù)的屬性呢,即container.dataitem真的消失了嗎?

  eval()是page的父類templatecontrol的方法

  templatecontrol.eval()可以自動(dòng)計(jì)算出container, 機(jī)制就是從一個(gè)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. templatecontrol.eval()

public class templatecontrol
{
 protected string eval (string expression, string format)
 {
  return databinder.eval (page.getdataitem(), expression, format);
 }
}

  結(jié)論:

  從上面看出page.eval()在計(jì)算的時(shí)候還是引用了container.dataitem,只不過這個(gè)dataitem通過dataitem container堆棧自動(dòng)計(jì)算出來的。我認(rèn)為page.eval()看似把問題簡(jiǎn)化了,其實(shí)把問題搞得更加神秘。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 潍坊市| 拜泉县| 临沭县| 峡江县| 元氏县| 分宜县| 德保县| 固原市| 江西省| 桓仁| 金寨县| 达拉特旗| 沅陵县| 诸暨市| 漳浦县| 凌源市| 韩城市| 定州市| 清镇市| 宁南县| 南郑县| 高淳县| 吴堡县| 上高县| 嘉禾县| 明星| 南通市| 古丈县| 夏邑县| 渭源县| 洛扎县| 凤阳县| 兴安县| 泸水县| 兴义市| 余干县| 綦江县| 和平区| 静安区| 彭山县| 嵩明县|