成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET Eval如何進行數(shù)據(jù)綁定

開發(fā) 后端
本文介紹了ASP.NET Eval 2.0相比于ASP.NET Eval 1.1在應用方面的變化,不可否認,新版本在操作上更加趨于簡化。

ASP.NET Eval在數(shù)據(jù)綁定方面的應用是眾所周知的,不過技術在發(fā)展,當ASP.NET Eval 1.1變成ASP.NET Eval 2.0的時候,在操作的時候會有什么變化呢?

假設你已經(jīng)了解ASP.NET Eval 1.1的數(shù)據(jù)綁定(特別是Container這個局部變量)的機制,這里主要分析ASP.NET Eval 2.0數(shù)據(jù)綁定做了那些改進。

ASP.NET Eval 2.0 的數(shù)據(jù)綁定函數(shù)Eval()簡化掉了ASP.NET Eval 1.1神秘的Container.DataItem,比如數(shù)據(jù)綁定表達式:

  1. <%# (Container.DataItem as DataRowView)["ProductName"].ToString() %> 

ASP.NET Eval 1.1簡化為:(去掉了類型指定, Eval通過反射實現(xiàn),本文不再闡述)

  1. <%# DataBinder.Eval(Container.DataItem, "ProductName").ToString() %>  

ASP.NET Eval 2.0又簡化為,去掉了Container局部變量:

  1. <%# Eval("ProductName") %> 

那么,Page.Eval()又是如何知道"ProductName"是那個數(shù)據(jù)的屬性呢,即Container.DataItem真的消失了嗎?

ASP.NET Eval()是Page的父類TemplateControl的方法

TemplateControl.Eval()可以自動計算出Container, 機制就是從一個dataBindingContext:Stack堆棧來獲取。

1. 建立DataItem Container 棧:

在Control.DataBind()中,建立,這樣可以保證子控件的DataItem Container始終在棧頂。

  1. public class Control  
  2. {  
  3.  protected virtual void DataBind(bool raiseOnDataBinding)  
  4.  {  
  5.   bool foundDataItem = false;  
  6.   if (this.IsBindingContainer)  
  7.   {  
  8.    object o = DataBinder.GetDataItem(thisout foundDataItem);  
  9.    if (foundDataItem)  
  10.     Page.PushDataItemContext(o); <-- 將DataItem壓入堆棧  
  11.   }  
  12.   try 
  13.   {  
  14.    if (raiseOnDataBinding)  
  15.     OnDataBinding(EventArgs.Empty);  
  16.  
  17.    DataBindChildren(); <-- 綁定子控件  
  18.   }  
  19.   finally 
  20.   {  
  21.    if (foundDataItem)  
  22.     Page.PopDataItemContext(); <-- 將DataItem彈出堆棧  
  23.   }  
  24.  }  

2. 獲取DataItem Container

  1. public class Page  
  2. {   
  3.  public object GetDataItem()  
  4.  {  
  5.   ...  
  6.   return this._dataBindingContext.Peek(); <-- 讀取堆棧頂部的DataItem Container,就是正在綁定的DataItem    Container  
  7.  }  

3. TemplateControl.Eval()

  1. public class TemplateControl  
  2. {  
  3.  protected string Eval (string expression, string format)  
  4.  {  
  5.   return DataBinder.Eval (Page.GetDataItem(), expression, format);   
  6.  }  

結論:

從上面看出Page.Eval()在計算的時候還是引用了Container.DataItem,只不過這個DataItem通過DataItem Container堆棧自動計算出來的。我認為Page.Eval()看似把問題簡化了,其實把問題搞得更加神秘。

【編輯推薦】

  1. ASP.NET模板控件開發(fā)淺析
  2. ASP.NET中Bind和Eval的區(qū)別:兩種綁定
  3. ASP.NET的XML數(shù)據(jù)
  4. ASP.NET數(shù)據(jù)綁定的內(nèi)部機理淺析
  5. ASP.NET 4.0新特性ClientID的改進
責任編輯:林琳 來源: C#技術學習中心
相關推薦

2011-07-06 08:46:30

2009-09-10 22:36:51

ASP.NET Eva

2009-07-28 14:06:28

ASP.NET 2.0

2009-07-22 17:21:27

ASP.NET 2.0

2009-08-07 15:34:15

ASP.NET數(shù)據(jù)綁定

2009-07-30 15:09:44

asp.net中Bin

2009-08-03 18:15:05

ASP.NET數(shù)據(jù)綁定

2009-08-07 15:45:26

ASP.NET復合控件數(shù)據(jù)綁定

2009-08-05 17:26:25

ASP.NET 2.0

2009-07-31 18:12:58

ASP.NET數(shù)據(jù)綁定

2009-08-05 17:43:48

ASP.NET 2.0

2009-07-27 09:01:44

ObjectDataS

2009-12-11 14:57:56

ASP.NET

2009-07-20 15:18:18

Bind標簽Eval標簽ASP.NET 2.0

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2011-05-25 00:00:00

數(shù)據(jù)庫設計

2009-08-05 17:58:53

自定義集合ASP.NET 2.0

2009-12-22 13:55:41

ASP.NETWebService
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人网91 | 成人国产一区二区三区精品麻豆 | 国产精品久久毛片av大全日韩 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 操视频网站 | 久久99精品久久久久久国产越南 | 欧美老少妇一级特黄一片 | 国产精品久久午夜夜伦鲁鲁 | h片在线免费看 | 国产精品久久久久久影视 | 国产精品国产自产拍高清 | 91在线视频观看 | 中文字幕一区在线观看视频 | 欧美人妇做爰xxxⅹ性高电影 | 91久久国产综合久久 | 日韩精品 电影一区 亚洲 | 美女国内精品自产拍在线播放 | 操久久| 天天艹逼网 | 日韩中文字幕一区 | 亚洲视频二区 | 亚洲国产成人av好男人在线观看 | 免费看欧美一级片 | 一区2区| 犬夜叉在线观看 | 美女爽到呻吟久久久久 | 国产免费看 | 久久性 | 狠狠干2020 | 国产91久久久久蜜臀青青天草二 | 888久久久 | 欧美精品二区 | 99久久久久久99国产精品免 | 亚洲人久久 | 午夜三级视频 | 久久精品视频在线观看 | 久久一区二区视频 | 亚洲永久 | 日韩中字幕 | 人人干人人看 | 黄a在线播放 |