中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-07-24 10:12:09 來源:億速云 閱讀:304 作者:chen 欄目:開發技術

這篇文章主要介紹“ASP.NET Eval如何進行數據綁定”,在日常操作中,相信很多人在ASP.NET Eval如何進行數據綁定問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ASP.NET Eval如何進行數據綁定”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

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

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

復制代碼 代碼如下:


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


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

復制代碼 代碼如下:


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


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

<%# Eval("ProductName") %>

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

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

TemplateControl.Eval()可以自動計算出Container, 機制就是從一個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);

}

}

結論:

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

到此,關于“ASP.NET Eval如何進行數據綁定”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

水富县| 永善县| 会理县| 江安县| 孝义市| 乌鲁木齐市| 个旧市| 左贡县| 辽宁省| 赫章县| 镇江市| 彰化县| 平潭县| 大名县| 古田县| 荣昌县| 木里| 徐水县| 濉溪县| 龙川县| 福海县| 呼图壁县| 河西区| 高阳县| 应用必备| 宁蒗| 仁寿县| 获嘉县| 永吉县| 股票| 南宁市| 安庆市| 昂仁县| 翁源县| 佳木斯市| 桦南县| 灵台县| 萍乡市| 临漳县| 吉安市| 日喀则市|