有人要问
你疯了吧
checkbox控件还用写你重写吗?没办法
最近做一个项目
写开发模板的时候
需要这样做!我的模板需要在前台用javascript控制控件的值和状态初始化
需要很多特殊的html attribute
记录一些控制参数
但是ms提供的控件没有这些属性
因此连checkbox都要自己做了!我的checkbox的需求是
: 包含所有的ms checkbox属性方法和事件
: 此外要对自己定义的checkbox加上enableflagwitowner等自定义属性
问题和解决思路如下
问题: 如果直接继承ms的checkbox 使用thisattributesadd(witownertrue) 语句给控件添加自定义属性属性会添加到控件产生的<span>上checkbox上没有加上这个属性在前台无法用javascript获取该属性来控制checkbox
解决思路:如果继承webcontrol然后覆盖render方法在render的时候用类似chkcheckboxrendercontrol(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(thistextalign==textalignright)
{
chkcheckboxid=thisclientid+_checkbox;
chkcheckboxrendercontrol(writer);
writerwrite(<label for=+chkcheckboxid+>+thistext+</label>);
}
else
{
writerwrite(<label for=+chkcheckboxid+>+thistext+</label>);
chkcheckboxid=thisclientid+_checkbox;
chkcheckboxrendercontrol(writer);
}
}
private void setgroupattributes()
{
//所有的cswit控件都需要带有这个属性
chkcheckboxattributesadd(witownertrue);
}