1

我通常避免使用 asp: 控件,并且总是使用纯 html 控件,runat="server"因为它们不灵活。但是,我们有一个使用这些 asp:controls 构建的系统。我别无选择,只能遵循它的建造方式。

这是问题所在,当我asp:CheckBoxList对控件DataTextField="Name"进行数据绑定时DataValueField="ID",每个输入复选框都使用不同的名称,当我需要选定的复选框 ID 时,我必须遍历整个checkboxlist以读取选定的值。

如果我们使用所有这些input name="Types"并读取Request.Form["Types"],我们可以得到所有选定的 ID 值,用逗号“,”分隔。通过这种方式,我可以避免遍历 that 中的所有项目checkboxlist。我们有什么办法可以让那些input checkbox使用相同的名字?

谢谢。

编辑:

我试过了,但它不工作

ChkPropertyFeatures.Attributes.Add("name", "Types")

我想使用相同名称的原因不仅仅是为了避免后端循环。我需要使用 jquery 通过名称属性选择所有这些复选框。是的,我知道我可以按类名进行选择,但我想知道是否可以更改 Checkboxlist 控件生成的那些复选框的名称属性。

4

2 回答 2

1

您不能从服务器端设置 Web 控件的名称。如果需要,可以使用 javascript 更改名称属性。

$("input[type='checkbox']").attr("name", "Types");

于 2012-07-30T01:52:10.443 回答
0

ACheckBoxList生成一个包含列表中每个复选框的跨度:

<table id="CheckBoxList1">
    <tr>
        <td><span name="chenchi"><input id="CheckBoxList1_0" type="checkbox" name="CheckBoxList1$0" value="Uno" /><label for="CheckBoxList1_0">Uno</label></span></td>
    </tr><tr>
        <td><span name="chenchi"><input id="CheckBoxList1_1" type="checkbox" name="CheckBoxList1$1" checked="checked" value="Dos" /><label for="CheckBoxList1_1">Dos</label></span></td>
    </tr><tr>
        <td><span name="chenchi"><input id="CheckBoxList1_2" type="checkbox" name="CheckBoxList1$2" checked="checked" value="Tres" /><label for="CheckBoxList1_2">Tres</label></span></td>
    </tr>
</table>

您可以通过这种方式动态更改每个跨度的名称:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        For Each c As ListItem In Me.CheckBoxList1.Items
                   c.Attributes("name") = "chenchi"
        Next
    End If
End Sub

然后您可以使用 jquery 来查看是否选中了每个复选框:

var sps = $('#CheckBoxList1').find('[name="chenchi"]');
sps.each(function (i) {
       alert( $(this).find('input:checkbox').attr('checked') ); 
});

希望我能很好地理解你的问题。

于 2012-07-30T07:26:48.613 回答