带Value属性的扩展CheckBox控件
2006-08-31 12:27 晓风残月 阅读(8124) 评论(7) 编辑 收藏 举报如何解决?其实方法很多。
- 为每个CheckBox 提供 HiddenField,将 CheckBox对应的Value存储在HiddenField中
缺点:麻烦,繁琐。 - 为每个CheckBox 提供 ViewState,将 CheckBox对应的Value存储在ViewState中
缺点:无法在client side 读取。 - 换用CheckBoxList,因为 CheckBoxList 实现了 ListControl,同时具有Text和Value属性
缺点:单个CheckBox不合适。适合于多个CheckBox的组合。
knonwn bug: CheckBoxlist 内部使用的 ListITem.Attributes 为实现视图(ViewState) updated: @07-05-13 - 换用Html服务器控件:<input runat="server" type="checkbox" />
缺点:没有了Text属性,如果需要需要自行添加。 - 开发自己的扩展CheckBox,使之具有Value属性,并对<input type="checkbox" valu="somevlaue" />对应。
- more unknown solutions。^_^
下面就是一个扩展的CheckBox:













// updated @07-05-13
return String.IsNullOrEmpty(s) ? "on" : s;





















下面是改控件呈现的HTML:

需要注意的是:
如果在 Value 属性的 set 访问器中这样设置:

但是如果设置其他属性却是可以的:

anybody knows why?
updated:2007年5月13日
发现了一个bug,当你将checkbox的value设置成空字符串的时候,如,
checkbox1.Attributes["value"] = "";
那么当页面回发(PostBock)的时候服务端无法真正获取此checkbox.checked 属性,此时永远返回页面初次请求的checkbox1.checked值,
后来才明白,原来html form中对于 <input type=checkbox>的value属性 具有默认值:on,如果这样设置<input type="checkbox" value="" />,那么表单回发是不会包含此 checkbox的,服务器自然也得不到这个值(asp.net 中通过 Request.Form 集合获取)
因此,应该如此修改 XCheckBox.Value 实现:

















update 2008年7月17日
在 ASP.NET 2.0 中为 CheckBox 增加了两个属性分别是 InputAttributes 与 LabelAttributes 来扩展 CheckBox 未能对应到 html checkbox 的属性<asp:CheckBox ID="CheckBox3" runat="server" Text="Item3" />
CheckBox3.InputAttributes.Add("value", "3"); // value=3
CheckBox3.LabelAttributes.CssStyle.Add(HtmlTextWriterStyle.Color, "red"); // 文本显示为红色
输出结果:
<input id="CheckBox3" type="checkbox" name="CheckBox3" value="3" /><label for="CheckBox3" style="color:red;">Item3</label>
有点遗憾的是,依然无法以声明的方式直接在 .aspx 中设置 value 值。
另外 RadioButton 继承自 CheckBox,自然也就支持上述两个新增属性。