在內容頁中調用母版頁控件一些方法總結

在內容頁中調用母版頁控件

1、在內容頁中有個屬性Master,可以通過它訪問母版頁。如我們要修改母版頁上的標題,我們看到顯示標題的那個

       Label的ID爲Label1,則在Page_Load事件中增加以下代碼:

      protected void Page_Load(object sender, EventArgs e)
     { 
            if (!IsPostBack) 
                   ((Label)Master.FindControl("Label1")).Text = "標題被修改了!";
      }

2、是服務器控件或者凡是runat=server的控件,其ClientID在頁面輸出後,都跟在設計時不一樣了。例如有個

      <input type="text" id="txtName" runat="server" /> 
      但輸出後,卻變成了 
      <input type="text" id="ctl00_Main_txtName" /> 
      如果你原本在javascript裏如下引用:document.getElementById("txtName");現在多半找不到了。可以沿用ASP的做法: 
      document.getElementById("<%=txtName.ClientID%>");

3、內容頁要訪問母版頁上的控件不象在同一頁上那麼方便。 需要用Page.Master.FindControl();的方式,例如, 
       TextBox txt = (TextBox)Page.Master.FindControl(“txtName”); 
       假如要訪問的控件是用戶控件,如果這樣寫: 
       MyCtrl myctrl = (MyCtrl)Page.Master.FindControl(“MyCtrl1”); 
       多半會編譯出錯,說缺乏MyCtrl的定義。原因是該控件在母版頁上聲明:  
       <%@ Register Src="myCtrl.ascx" TagName="myCtrl" TagPrefix="uc1" %> 
       一般情況下在內容頁就不用再聲明瞭。但如果要訪問它就不同,也要在內容頁的頭部加上這一句才行。

       如果用戶控件類名是Control_myCtrl,ID爲MyCtrl,則在內容頁用 

      ASP.myCtrl  myCtrl=(ASP.myCtrl)Master.FindContrl("MyCtrls 1")就可以進 行引用了。 

4、要支持在母版頁上的控件事件怎麼辦?
      比如說,我要在內容頁支持我自己寫的用戶控件MyCtrl(在母版頁)的OnClick事件該怎麼辦?總不能將代碼寫在母版頁吧?

      別忘了,事件本質是委託,我們只要在內容頁添加對該事件的委託就行了。 
      以前1.1的時候,代碼頁面有Page_Init事件的代碼,可2.0就不知道跑哪去了。幸而自己加上去也有效: 
      protected void Page_Init(object sender, EventArgs e) 
     { 
           MyCtrl myctrl = (MyCtrl)Page.Master.FindControl(“MyCtrl1”); 

           if (myctrl != null) 
                 myCtrl.Click += new MyCtrl.ClickEventHandler(MyCtrl1_Click);
      }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章