簡體   English   中英

數據綁定和用戶控件

[英]Data binding and user controls

這真是讓我煩惱,所以我希望有人可以幫助我一點


1)假設頁面包含用戶控件,則在UserControl.Page_Load之前觸發Page.Page_Load


a)我假設如果Page包含ObjectDataSource1控件,那么ObjectDataSource1將在UserControl.Page_Load之前執行數據綁定?!


b)如果是這種情況,那么Page.Prerender也會在UserControl.Page_Load之前發生嗎?


c)如果UserControl包含ObjectDataSource2控件,該控件是否會在ObjectDataSource1 (直接包含在Page內 )的同時執行數據綁定?

  • 但這沒有多大意義,因為我會假設UserControl中的 控件遵循UserControl的生命周期而不是Page的

  • 無論如何,我認為托管用戶控件的網頁無法接收事件或調用用戶控件中包含的控件的方法?!如果是這樣,那么網頁如何能夠在ObjectDataSource2上調用數據綁定?


感謝名單


編輯:

我混淆的主要原因是以下一些書的引用:

...用戶的國家,州和城市只能從配置文件中讀取一次並保存在本地變量中。 UserControl.Page_Load不能用於此,因為UserControl.ObjectDataSource完成的自動綁定發生得更早,所以我們必須使用UserControl.Page_Init事件處理程序

我假設在上面引用作者建議如果用戶控件包含ODS,那么這個ODS將在UserControl.Page_Load之前執行數據綁定,這不是你所說的?

BTW - 用戶控制上面提到的引用是在設計時添加到網頁


另一個編輯:

我做了一些谷歌搜索,這本書(或其中的一部分)可通過以下鏈接獲得。

http://books.google.com/books?id=hziE1NB0UkIC&printsec=frontcover&dq=website+programming+asp.net+2.0+design+solution&ei=7lmESv63Npu-ygTO0f2yDg#v=onepage&q=&f=false

無論如何,引用來自第257頁,它基本上是描述ArticleListing.ascx用戶控件的部分的一部分。

順便說一句 - 這樣你就不會認為我是妄想......我不希望任何人閱讀關於該用戶控件的整個部分,我只是認為第257頁的代碼可能會提供足夠的上下文來弄清楚作者究竟是什么意思

您的所有問題都與ASP.Net頁面生命周期有關。 您應該從這里開始: ASP.Net頁面生命周期概述

但是,要回答一些具體問題。

(1)從我提供的鏈接:

Page調用頁面上的OnLoad事件方法,然后遞歸地為每個子控件執行相同操作,這對每個子控件執行相同操作,直到加載頁面和所有控件。

(a)這是不正確的。 DataBinding恰好在PreRender之前發生。

(二)將Page.PreRender 在該用戶控件不被添加到該頁面,直到頁的生命周期的預渲染部分(即動態地添加)的情況下UserControl.PageLoad之前發生。 如果是這種情況,那么用戶控件的所有生命周期事件將在添加到Page的Control集合后立即連續觸發,直到它趕上它的父容器,即Page。

(c)DataBinding將在同一時間發生,只要此時將usercontrol添加到頁面即可。 用戶控件的數據綁定將在頁面的控件被數據綁定后發生。

(c)項目符號點:usercontrol有自己的生命周期,為true,但同樣,在將控件添加到頁面上的容器之前,它不會被執行。 這也應該回答你的第二個要點。


編輯:這是本書的一個有趣的摘錄,我很想說它完全不正確。 但是,我需要看看作者正在談論什么樣的背景。 也許他正在討論書中的一個示例對象,它在OnInit處理程序中具有特殊邏輯來進行數據綁定。

話雖這么說,我設置了一個測試項目來檢查默認行為。 我添加了一個ObjectDataSource,其中Select方法返回一個字符串數組,一個用戶控件(.ascx)帶有一個綁定到數據源的轉發器,還有一個添加了用戶控件的頁面。 事件的順序如我所料:

MyObjectDataSource -> Init
UserControl -> Init
Page -> Init
Page -> Load
UserControl -> Load
MyObjectDataSource -> Load
Repeater1 -> DataBinding
MyObjectDataSource -> Selecting
MyObjectDataSource -> SelectMethod
Repeater1 -> DataBound

ObjectDataSource文檔也支持這個:

只要調用Select方法,ObjectDataSource控件就會檢索數據。 此方法提供對SelectMethod屬性指定的方法的編程訪問。 SelectMethod屬性指定的方法由調用其DataBind方法時綁定到ObjectDataSource的控件自動調用。 如果設置數據綁定控件的DataSourceID屬性,則控件會根據需要自動綁定到數據源中的數據。 設置DataSourceID屬性是將ObjectDataSource控件綁定到數據綁定控件的推薦方法。 或者,您可以設置DataSource屬性,但是您必須顯式調用數據綁定控件的DataBind方法。 您可以隨時以編程方式調用Select方法來檢索數據。

我不得不得出結論,除非在某些特殊情況下引用該引言,否則作者完全錯了。 也許他錯誤地寫了“數據綁定”,當他的意思是“從ViewState中檢索以前綁定的值”時?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM