偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

假設(shè)你已經(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.  }  

結(jié)論:

從上面看出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的改進
責(zé)任編輯:林琳 來源: C#技術(shù)學(xué)習(xí)中心
相關(guān)推薦

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復(fù)合控件數(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ù)庫設(shè)計

2009-08-05 17:58:53

自定義集合ASP.NET 2.0

2009-12-22 13:55:41

ASP.NETWebService
點贊
收藏

51CTO技術(shù)棧公眾號