asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

自定义ASP.NET CheckBox的设计思路


发布日期:2021年12月29日
 
自定义ASP.NET CheckBox的设计思路
有人要问你疯了吧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);

}

上一篇:ASP.NET 3.5核心编程之AJAX Web Service的调用

下一篇:如何在命令行下编译一个ASP.NET项目