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

ASP.NET Eval如何進行數據綁定

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

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

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

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

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

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

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

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

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

那么,Page.Eval()又是如何知道"ProductName"是那個數據的屬性呢,即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模板控件開發淺析
  2. ASP.NET中Bind和Eval的區別:兩種綁定
  3. ASP.NET的XML數據
  4. ASP.NET數據綁定的內部機理淺析
  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數據綁定

2009-07-30 15:09:44

asp.net中Bin

2009-08-07 15:45:26

ASP.NET復合控件數據綁定

2009-08-05 17:26:25

ASP.NET 2.0

2009-07-31 18:12:58

ASP.NET數據綁定

2009-08-05 17:43:48

ASP.NET 2.0

2009-07-27 09:01:44

ObjectDataS

2009-08-03 18:15:05

ASP.NET數據綁定

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

數據庫設計

2009-12-22 13:55:41

ASP.NETWebService

2009-08-05 17:58:53

自定義集合ASP.NET 2.0
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品亚洲一区二区 | 人人草天天草 | 欧美视频成人 | 欧美日一区二区 | 久久成人av电影 | 国产精品视频一 | 欧美一级视频在线观看 | 久草青青 | 99精品国产在热久久 | 日韩欧美成人精品 | 中文字幕一级毛片 | 欧美午夜精品 | 日韩在线视频免费观看 | av毛片| 久久久久国产视频 | 欧美高清视频 | 久久成人免费 | 国产综合网址 | 午夜tv免费观看 | 国产在线观看av | 欧美日韩在线免费观看 | 一区二区三区回区在观看免费视频 | av av在线 | 日本人做爰大片免费观看一老师 | 91精品久久久久久久久中文字幕 | 亚洲一区在线免费观看 | 欧美精品一二三区 | 久草影视在线 | 日韩精品免费 | 精品国产伦一区二区三区观看体验 | 亚州精品天堂中文字幕 | 精品欧美一区二区三区久久久 | 一区二区三区视频在线 | 久久久国产精品一区 | 极品国产视频 | 国产精品久久久久久久久久久久午夜片 | 日韩综合在线 | 国产精品久久久久久久久久久久 | 久久亚洲一区二区 | 国产精品欧美一区二区 | 最新国产精品精品视频 |