我們知道,母版頁與內(nèi)容頁合并后事件的發(fā)生順序:
1.母版頁控件 Init 事件。
2.內(nèi)容控件 Init 事件。
3.母版頁 Init 事件。
4.內(nèi)容頁 Init 事件。
5.內(nèi)容頁 Load 事件。
6.母版頁 Load 事件。
7.內(nèi)容控件 Load 事件。
8.內(nèi)容頁 PreRender 事件。
9.母版頁 PreRender 事件。
10.母版頁控件 PreRender 事件。
11.內(nèi)容控件 PreRender 事件。
MSDN上說,引發(fā)事件的一般規(guī)則是初始化事件從最里面的控件向最外面的控件引發(fā),所有其他事件則從最外面的控件向最里面的控件引發(fā)。請記住,母版頁會合并到內(nèi)容頁中并被視為內(nèi)容頁中的一個控件,這一點(diǎn)十分有用。
所以有時候,我們所需功能的實(shí)現(xiàn)需要了解Master頁與內(nèi)容頁事件的交互,
下面示例為: MasterPage里有一日歷控件,選擇日期變化時,內(nèi)容頁產(chǎn)生相應(yīng)的動作(頁面里簡單代碼如下)。
(環(huán)境:VS2005)
(PM.Master)
1 ...
2 ...
3 <form id="form1" runat="server">
4 ...
5 ...
6 <div id="divCalendar">
7 <asp:Calendar ID="Calendar1" runat="server" OnSelectionChanged="Calendar1_SelectionChanged" >
8 </asp:Calendar>
9 <div>
10 <div id="container">
11 <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
12 </asp:ContentPlaceHolder>
13 </div>
14 ...
15 ...
16 </form>
17 ...
18 ...
(PM.Master.cs)
聲明一個事件委托類型,該委托將事件與事件處理程序連接。在此,DisplayPictures 委托 會連接Master頁與內(nèi)容頁
的事件觸發(fā)機(jī)制。
1 public partial class PM : System.Web.UI.MasterPage
2 {
3 protected void Page_Load(object sender, EventArgs e)
4 {
5 if (!IsPostBack)
6 {
7 Calendar1.SelectedDate = DateTime.Now.Date;
8 }
9 ...
10 ...
11
12 }
13
14 public event EventHandler DisplayPictures;
15 //public delegate void Display(string ss);
16 protected void Calendar1_SelectionChanged(object sender, EventArgs e)
17 {
18 Calendar ca = sender as Calendar;
19 string selectDate= ca.SelectedDate.ToString("yyyyMMdd");
20 DisplayPictures(this, null);
21 }
22 ...
23 ...
24 }
25
內(nèi)容頁中在類似 page_load 事件里通過Master頁的聲明的委托把事件注冊到MasterPage里。
注意使用MasterPage的類型PM,實(shí)例化Master。
(Schedule.aspx.cs)
1 protected void Page_Load(object sender, EventArgs e)
2 {
3 ...
4 if (IsPostBack)
5 {
6 ((PM)Master).DisplayPictures += new EventHandler(DisplayThisPage);
7 }
8 ...
9 }
類似這種方法:this.Page.Master.FindControl("controlID")可以找到MasterPage里的控件并獲取其值。
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答!! 點(diǎn)擊進(jìn)入論壇