国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 新沂市| 齐齐哈尔市| 赤水市| 东方市| 湛江市| 璧山县| 什邡市| 长岭县| 文山县| 大兴区| 黎城县| 慈利县| 阿拉尔市| 通榆县| 铁力市| 略阳县| 彭山县| 连南| 营山县| 图木舒克市| 佳木斯市| 会东县| 蚌埠市| 桓仁| 高青县| 山阳县| 林周县| 靖边县| 当雄县| 吉木乃县| 林甸县| 永康市| 康保县| 阿瓦提县| 葵青区| 鹤山市| 邵阳县| 永春县| 宾阳县| 横山县| 泸水县|