在ASP.NET 1.1下實現模板化站點的新思路

ASP.NET 2.0已經實現了母版支持.可是,問題是在ASP.NET 2.0未出來前,我們該如何來最大限度的降低站點製作的難度呢?
有許多人是用VS2003+DW的模板來實現的.我想,箇中的不便,大家深有體會.
也有人使用包含或用戶控件來實現.
我想,包含就意味着被包含的部分無法實現CODE BEHIND,用戶控件實現倒還可以,但也不是很方便
其實ASP.NET 1.1實現模板化是別有洞天的!
ASP.NET的WEBFORM是派生於類System.WEb.UI.Page,因此,只要我們爲整個站點寫一個自定義的PAGE類,在該類中,我們使用LoadControl來載入用戶控件,然後使用Controls.AddAt將其加入到合適的位置(通常是首尾啦).
然後,我們建立其他WEBFORM,但將其基類改爲我們自定義的PAGE類即可
下面是我的一個簡單的測試.我假設整個模板是由一個固定的頭和尾以及中間可變的正文內容區構成.這是最簡單的情況了
我定義一個MyWeb的PAGE類,定義兩個屬性,都是Label(當然,你也可以定義PlaceHolder,然後用其載入UserControl),然後在OnPrerender中,將其加入到Page.CONtrol集合的首尾.下面是代碼
public class MyWeb:System.Web.UI.Page
    {
        public Label HeaderLabel=new Label();
        public Label EnderLabel=new Label();
        public MyWeb()
        {
            //
            // TODO: 在此處添加構造函數邏輯
            //
        }
        
        protected override void OnPreRender(EventArgs e)
        {
            HeaderLabel.Text="這是頭部內容";
            this.Controls.AddAt(0,HeaderLabel);            
            EnderLabel.Text="這是尾部的內容";
            this.Controls.AddAt(this.Controls.Count-1,EnderLabel);
            base.OnPreRender(e);
        }


    }
然後,建立一個頁面,將其派生於MyWeb,在設計視圖中隨便輸入幾個文字在頁面中(要注意,這個時候頁面的內容實際上代表的是正文區內容)
下面是編譯後運行的結果

按此在新窗口打開圖片

可以看到,實例頁中輸入的"這是中間的內容"準確的落入到了正確的位置
當然,如果你願意,你也可以在派生頁中使用代碼關閉掉基類頁中的某部分,下面是代碼和效果
private void Page_Load(object sender, System.EventArgs e)
        {
            // 在此處放置用戶代碼以初始化頁面
            base.HeaderLabel.Visible=false;
        }
顯示的結果

按此在新窗口打開圖片
可以看到頭部的內容沒了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章