Asp.net 支持值属性的.NET复选框控件

Asp.net 支持值属性的.NET复选框控件,asp.net,checkbox,user-controls,checkboxlist,Asp.net,Checkbox,User Controls,Checkboxlist,我知道默认的.NET复选框控件不支持Value属性。这对我来说似乎很奇怪,因为输入控件确实支持值作为html规范的一部分 所以我的问题是,这里是否有人知道asp.net的自定义用户控件,其行为类似于标准asp.net复选框和复选框列表 是否“选中”与“值”相同 看看里面。您实际上不需要一个专门命名为“Value”的属性,因为“Checked”将提供相同的信息。不,它们不一样 我正在使用的功能要求将产品升级列表显示为复选框列表。根据“选中”的复选框,我需要将它们添加到产品中。复选框列表中的项目是

我知道默认的.NET复选框控件不支持Value属性。这对我来说似乎很奇怪,因为输入控件确实支持值作为html规范的一部分

所以我的问题是,这里是否有人知道asp.net的自定义用户控件,其行为类似于标准asp.net复选框和复选框列表

是否“选中”与“值”相同


看看里面。您实际上不需要一个专门命名为“Value”的属性,因为“Checked”将提供相同的信息。

不,它们不一样


我正在使用的功能要求将产品升级列表显示为复选框列表。根据“选中”的复选框,我需要将它们添加到产品中。复选框列表中的项目是动态的,所以当我遍历选中的项目时,我需要某种唯一的标识符。“Checked”值只是一个布尔值

MS在这里所做的是创建他们的ASP控件,给他们一种.net的感觉。但是,由于它们应该与浏览器一起使用,因此它们呈现为标准HTML控件

因此,在cs/vb背后的代码中,您可以看到.Checked(bool),而在client/javascript中,您可以看到.value


如果您想要的是一个唯一的标识符,那么您需要查看ID或ClientID。或者,您可以向checkboxt(.Attributes.add())添加一个属性并使用它。

如果您只需要在服务器端访问它,您可以轻松创建一个继承checkboxt控件的服务器控件,并向其添加一个名为value的属性,该属性可以从服务器端设置和检索

但是,如果您需要从客户端访问它,则必须对服务器控件呈现的内容进行想象-可能是复选框和隐藏字段的组合,其中隐藏字段包含值


如果您所做的只是在服务器端提取复选框的值,那么我可以想象,复选框控件的简单扩展就足够了-添加一个可以从服务器端设置和检索的额外属性。。。在公园里散步。

也许我误解了你的问题,但是你知道你也可以使用典型的HTML控件吗

例如,创建一个ASPX页面并添加以下源:

    <div>
            <input type="checkbox" runat="server" id="chkBox" value="test" />
            <asp:Label ID="lblCheckboxValue" runat="server" />
    </div>

    <asp:Button runat="server" OnClick="Button_Click" />

您可以将html复选框值属性设置为您喜欢的任何值。

这些值似乎没有在html中呈现,但仍然存储在viewstate中。因此,当我访问CheckboxList中的ListItem对象时,我能够在服务器端提取该值。Items()

您可以通过覆盖复选框来创建自己的自定义控件。下面是我刚刚创建的一个示例,用于添加服务器端和客户端可用的值属性:

public class ValueCheckBox : CheckBox
{
    public string Value
    {
        get;
        set;
    }

    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        writer.AddAttribute("value", this.Value);
        base.Render(writer);
    }
}

这是一个老问题,但情况已经改变了。首先,在asp.net 4.6中,将在复选框上设置value属性。这些答案中很少有与CheckBoxList相关的,CheckBoxList使用ListItem类生成复选框

我对4.6之前版本的解决方案是添加一个数据属性。这将在复选框和标签周围创建一个
控件,您可以使用javascript找到该控件

        foreach( ListItem item in selCheckList.Items)
        {
            item.Attributes["data-role-id"] = item.Value;
        }

它应该仍然有一个ID,您可以使用该属性。如果您需要链接,请点击此处:仅供参考。在.NET 4.6中,正在设置value属性。不是在4.5中
        foreach( ListItem item in selCheckList.Items)
        {
            item.Attributes["data-role-id"] = item.Value;
        }