上一篇說要對以前進行補充,那個補充就先留著吧.寫總結比較累,所以這篇為第16篇,第15篇先留著
這次我們繼續討論.主題是模板控件,模板控件將是復雜控件的起步
1.asp.net內置的模板控件,了解模板控件
如下圖,以下為asp.net內置的模板控件
上圖的控件一方面是模板控件,另一方面又是數據綁定控件.這裡我們暫且不討論如何實現數據綁定.
使用上面控件的話,應該熟悉控件存在著不同的模板,如下圖Repeater控件的模板類型.
在不同模板內你可以定義控件顯示內容會呈現不同效果.典型的運用就是GridView,其呈現代碼會是一個表格代碼,而Repeater則是自定義的.其實其是內部已經實現了的,暫且先不管這些.下面一步步看下來如何實現.
2.實現模板控件
2.1簡單實現模板控件(靜態模板)
(1)模板控件為特殊的復合控件,你還是需要實現INamingContainer接口,因為在模板屬性的內容是為子控件集合添加到模板控件中,為保證控件具有唯一標識符.其實現將在CreateChildControls方法中創建子控件.
asp.net2.0中可以直接繼續CompositeControl就可
(2)定義控件屬性
模板屬性為System.Web.UI.ITemplate 接口,此接口有一InstantiateIn 方法 將在下面分析
上一篇我們說明了控件內部屬性和控件的區別,模板並非控件而是屬性,我們在屬性浏覽器中並未看到此屬性,是因為我們為其加了元數據,作為內部屬性使用
定義模板屬性方法如下
//聲明變量
private ITemplate _itemTemplate;
//屬性
[Browsable(false)]
[TemplateContainer(typeof(Article))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate ItemTemplate
{
get { return _itemTemplate; }
set { _itemTemplate = value; }
}
這裡我們認識到了一個TemplateContainer元數據,其與容器控件關聯起來.Article為默認其自身控件,即默認將自身控件作為容器控件.