自定義控制項的構建 9

2022-01-11 05:16:22 字數 2620 閱讀 8027

share

前面重點介紹了parsechildren特性,當其為false時,控制項的內容會自動的解析成控制項的子控制項,這時控制項內包含的所有內容都會新增到controls集合中,

而控制項內任何非伺服器控制項將解析成literal控制項,某些時候可能僅允許一種控制項被新增到controls集合裡。

addparsedsubobject()

addparsedsubobject()會在每個控制項被新增進controls集合中呼叫,通過重寫該方法,可以阻止控制項被新增進controls集合。

controlbuilder

asp.net框架在解析頁面時,會使用到controlbuilder類,因此可以給控制項關聯乙個自定義的controlbuilder類修改控制項解析內容的行為,controlbuilder類有幾個比較常用的方法,可以檢視msdn,其中getchildcontroltype()可以把任意標籤對映成控制項。

看一段比較長的**

[parsechildren(false)]
[controlbuilder(typeof(servertabsbuild ))]
public

class tabcontrol:webcontrol,ipostbackeventhandler

else
}
set
}
protected

override

void addparsedsubobject(object obj)

}
protected

override htmltextwritertag tagkey

}
protected

override

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();
}
public

void raisepostbackevent(string eventargument)

}
public

class servertab : control

}
public

class 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...