为什么我不能在 asp:CheckBox 上设置值?



没有属性Value:

<asp:CheckBox ID="CheckBox1" runat="server" />

而在标准HTML上,这是允许的:

<input type="checkbox" ID="CheckBox1" value="My Valyue" />

为什么?

Text属性用于呈现复选框的标签。

控件有一个InputAttributes属性,您可以将其添加到:

myChk.InputAttributes.Add("value", "My Value");

我相信,如果您简单地将value属性添加到标记中,它也会被填充。

您可以访问这样的值:

myChk.InputAttributes["value"];

为了回答为什么Value不是CheckBox控件的内置属性的问题:

处于隔离状态(仅凭其自身)的CheckBox不需要任何值。根据定义,它是一个布尔值,由它的ID标识。你所需要做的就是检查它是否被检查过。

复选框进行分组时,该值就会发挥作用,并且有一个控件-使用ListItemCheckBoxList-每个ListItem都有一个Value属性。

不要使用asp:CheckBox控件,而是使用html输入复选框,并在服务器上运行它。

<input type="checkbox" id="ck" runat="server" value='<%# Eval("Value") %>' />
<asp:Label ID="lbl" runat="server" AssociatedControlID="ck" Text='<%# Eval("Name") %>'></asp:Label>

现在,您可以从codeehind将其引用为HtmlInputCheckBox(我的最新示例是在中继器中,所以我可以用其他元素来装饰这个复选框列表的替代品,比如工具提示图像)。

foreach (RepeaterItem repeaterItem in repCheckboxes.Items)
{
    HtmlInputCheckBox listItem = (HtmlInputCheckBox)repeaterItem.FindControl("ck");
    if (listItem.Checked)
    {
         string val = listItem.Value;
         ...

我知道这并不能回答OP的"为什么",但在搜索这个确切的问题时,这是一个很好的解决方案。至于为什么,我认为MS忽略了它,因为你不能控制CheckBoxList 中的html

最新更新