有人要問
你瘋了吧
checkbox控件還用寫你重寫嗎?沒辦法
最近做一個項目
寫開發模板的時候
需要這樣做!我的模板需要在前台用javascript控制控件的值和狀態初始化
需要很多特殊的html attribute
記錄一些控制參數
但是ms提供的控件沒有這些屬性
因此連checkbox都要自己做了!我的checkbox的需求是
: 包含所有的ms checkbox屬性方法和事件
: 此外
要對自己定義的checkbox加上enableflag
witowner等自定義屬性
問題和解決思路如下
問題: 如果直接繼承ms的checkbox
使用this
attributes
add(
witowner
true
) 語句給控件添加自定義屬性
屬性會添加到控件產生的<span>上
checkbox上沒有加上這個屬性
在前台無法用javascript獲取該屬性
來控制checkbox
解決思路:如果繼承webcontrol
然後覆蓋render方法
在render的時候
用類似chkcheckbox
rendercontrol(writer); 的語句添加htmlinputcheckbox
再加一個文字label
應該可以用符合控件的方式模擬出ms checkbox
並且帶自己定義屬性的功能
但是
這個時候出現的問題是
無法把控件放到<span></span>中
設置控件背景顏色等屬性
無法針對控件生效! 解決辦法
為了滿足以上需求
控件繼承webcontrol
覆蓋rendercontents
語法如下
/// <summary>
/// 繪制控件的內容
即
繪制span包含的部分
在rendercontents函數裡面寫
/// 子控件的render
可以讓復合控件的span包含子控件
便於寫前台script操作
/// </summary>
/// <param name=
writer
></param>
protected override void rendercontents(htmltextwriter writer)
{
setgroupattributes();
if(this
textalign==textalign
right)
{
chkcheckbox
id=this
clientid+
_checkbox
;
chkcheckbox
rendercontrol(writer);
writer
write(
<label for=
+chkcheckbox
id+
>
+this
text+
</label>
);
}
else
{
writer
write(
<label for=
+chkcheckbox
id+
>
+this
text+
</label>
);
chkcheckbox
id=this
clientid+
_checkbox
;
chkcheckbox
rendercontrol(writer);
}
}
private void setgroupattributes()
{
//所有的cswit控件都需要帶有這個屬性
chkcheckbox
attributes
add(
witowner
true
);
}
From:http://tw.wingwit.com/Article/program/net/201311/13784.html