没有属性Value
:
<asp:CheckBox ID="CheckBox1" runat="server" />
在标准HTML上允许这样做:
<input type="checkbox" ID="CheckBox1" value="My Valyue" />
为什么?
答案 0 :(得分:22)
Text
属性用于为复选框呈现标签。
该控件具有InputAttributes
属性,您可以将其添加到:
myChk.InputAttributes.Add("value", "My Value");
我相信如果您只是将value
属性添加到标记中,也会填充此内容。
您可以像这样访问值:
myChk.InputAttributes["value"];
要回答为什么 Value
不是CheckBox
控件的内置属性的问题:
孤立的CheckBox
(仅靠它自己)不需要任何价值。根据定义,它是一个布尔值,由其ID标识。您需要做的就是检查是否已经检查过。
当您分组复选框并且有一个控件时,该值会起作用 - 使用CheckBoxList
的ListItem
- 每个ListItem
确实有一个Value
财产。
答案 1 :(得分:2)
使用html输入复选框,然后在服务器上运行它,而不是使用asp:CheckBox控件。
<input type="checkbox" id="ck" runat="server" value='<%# Eval("Value") %>' />
<asp:Label ID="lbl" runat="server" AssociatedControlID="ck" Text='<%# Eval("Name") %>'></asp:Label>
现在,您可以从代码后面将其作为HtmlInputCheckBox引用(我的最新示例在转发器内部,因此我可以用其他元素(例如工具提示图像)来装饰此复选框列表的替代品)。
foreach (RepeaterItem repeaterItem in repCheckboxes.Items)
{
HtmlInputCheckBox listItem = (HtmlInputCheckBox)repeaterItem.FindControl("ck");
if (listItem.Checked)
{
string val = listItem.Value;
...
我知道这不能回答OP的“为什么”问题,但是在搜索此确切问题时非常重要,这是一个很好的解决方案。至于为什么,我认为MS忽略了它,因为您无法控制CheckBoxList中的html