C# 为什么asp.net复选框未被禁用?

C# 为什么asp.net复选框未被禁用?,c#,jquery,asp.net,C#,Jquery,Asp.net,我正在尝试将我的复选框的disabled属性设置为true。但是,当我回发时,复选框仍处于启用状态 HTML: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <script src=

我正在尝试将我的
复选框的disabled属性设置为true。但是,当我回发时,
复选框
仍处于启用状态

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

<head runat="server">
    <title></title>
    <script>
        $(document).ready(
            function () {
                $("#CheckBoxList1_0").attr('disabled',true);
            }
    );
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:CheckBoxList ID="CheckBoxList1" runat="server">
            <asp:ListItem>een</asp:ListItem>
            <asp:ListItem>twee</asp:ListItem>
            <asp:ListItem>drie</asp:ListItem>
        </asp:CheckBoxList>
    </div>
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </form>
</body>
</html>
 protected void Button1_Click(object sender, EventArgs e)
        {
            if (!CheckBoxList1.Items[0].Enabled)
            {
                Response.Write("it is disabled");

            }
        }

使用jQuery添加或以任何方式添加的CSS属性(如
disabled
)在执行回发时不会发布到服务器

如果您确实需要跟踪哪些复选框被禁用,实现这一点的一种方法是将这些元素的ID存储到隐藏输入中,其值将发布到服务器

像这样的东西应该有用

<input type="hidden" runat="server" id="yourHiddenInput" />

$("form").submit(function(){
    var allIds = [];
    $("input[type='checkbox']:disabled").each(function() {
       allIds.push($(this).attr("id"));
    });
    $("#yourHiddenInput").val(allIds.join());

    //form is about to post.  When it does, 
    //you'll be able to read the ids via yourHiddenInput.Value
});

$(“表格”)。提交(函数(){
var allIds=[];
$(“输入[type='checkbox']:已禁用”)。每个(函数(){
allid.push($(this.attr(“id”));
});
$(“#yourhidenInput”).val(allIds.join());
//表单即将发布。当它发布时,
//您可以通过hiddeninput.Value读取ID
});

使用javascript更改复选框时,更改仅在客户端上进行,我相信复选框的viewstate信息不会更新,因此,当页面知道回发时,复选框仍处于未选中状态

是否有理由使用一个
复选框列表
而不是三个单独的
复选框
e?如果您使用real
复选框
,则可以使用属性
Enabled
,并将其设置为
false
。如果您有一个复选框,并使用jQuery禁用它(set disabled=disabled),那么它确实会对服务器产生影响,尽管这并不是您所期望的。设置为禁用时,服务器端将忽略该控件的“选中”值。如果不禁用它,服务器将看到复选框的正确值。它不会影响服务器的item.Enabled概念,甚至不会影响item.Attributes[“disabled”]。该示例不是关于“选中”复选框。即便如此,您还是错了:使用js更改复选框的“选中”状态会像您预期的那样传播到服务器。