share
前面重點介紹了parsechildren特性,當其為false時,控制項的內容會自動的解析成控制項的子控制項,這時控制項內包含的所有內容都會新增到controls集合中,
而控制項內任何非伺服器控制項將解析成literal控制項,某些時候可能僅允許一種控制項被新增到controls集合裡。
addparsedsubobject()
addparsedsubobject()會在每個控制項被新增進controls集合中呼叫,通過重寫該方法,可以阻止控制項被新增進controls集合。
controlbuilder
asp.net框架在解析頁面時,會使用到controlbuilder類,因此可以給控制項關聯乙個自定義的controlbuilder類修改控制項解析內容的行為,controlbuilder類有幾個比較常用的方法,可以檢視msdn,其中getchildcontroltype()可以把任意標籤對映成控制項。
看一段比較長的**
[parsechildren(false)]
[controlbuilder(typeof(servertabsbuild ))]
publicclass tabcontrol:webcontrol,ipostbackeventhandler
else
}
set
}
protectedoverride
void addparsedsubobject(object obj)
}
protectedoverride htmltextwritertag tagkey
}
protectedoverride
void rendercontents(htmltextwriter writer)
else
writer.renderbegintag(htmltextwritertag.div);
writer.addattribute(htmltextwriterattribute.href, eref);
writer.renderbegintag(htmltextwritertag.a);
writer.write(tab.text);
writer.renderendtag();
writer.renderendtag();
}
writer.write("");
writer.addattribute(htmltextwriterattribute.class, "tabcontents");
writer.renderbegintag(htmltextwritertag.div);
this.controls[selecttabindex].rendercontrol(writer);
writer.renderendtag();
}
publicvoid raisepostbackevent(string eventargument)
}
publicclass servertab : control
}
publicclass servertabsbuild : controlbuilder
else
}
}
**比較長,但是依然可以分析其邏輯,其中tabcontrol類被controlbuilder修飾了,而該特性將tabcontrol關聯到乙個稱為servertabsbuild
的controlbuilder類,servertabsbuild類則重寫了getchildcontroltype(),其作用是將對映成控制項,也正是這個原因,在tabcontrol類
宣告選項卡時不再需要使用runat屬性了。
看看頁面上的**
<mycustom:tabcontrol
id="tabcontrol"
runat="server"
>
<tabtext="first"
>
hello!
tab>
<tabtext="first"
>
hello!!
tab>
<tabtext="first"
>
hello!!!
tab>
mycustom:tabcontrol
>
可以看到標籤將取代了。
本文參考了《asp.net 3.5揭秘》
自定義控制項的構建(14)
share 在asp.net中與資料打交道接觸最多的可能就是各類資料來源控制項了,這篇在前面的基礎上構建乙個模板化的資料繫結控制項 資料繫結控制項 我們現在建立乙個繼承compositedataboundcontrol的控制項,其可以在中顯示一批資料項 和前面的內容一樣,我們首先實現乙個實現idat...
自定義控制項的構建 8
share 在前面的幾節基礎上,現在我們開始涉足構建物件集合的控制項,以gridview而言,其內部就包含了多個databoundfield控制項來表示所要顯示的各個列。首先了解名為parsechildren的特性,其用來決定如何解析控制項包含的內容 值為true時,控制項所包含的內容將作為控制項的...
自定義控制項的構建 7
share 在處理回傳事件中,還需要考慮的因素就是事件引數和選項 傳遞歸傳事件引數 前面曾提到getpostbackclienthyperlinkc 可以為其提供乙個可選引數,其在引發回傳時從瀏覽器傳到伺服器,它的值傳遞到伺服器的 raisepostbackevent 中,這裡實現的功能類似於gri...