自定义呈现CheckBoxList项,以便在LI上设置类

本文关键字:LI 设置 CheckBoxList 自定义 | 更新日期: 2023-09-27 17:49:15

我有一个CheckBoxList(框架版本4),与RepeatLayout设置为UnOrderedList。我想在每个LI上生成一个类来简化一些客户端编码和样式,但是,我做不到。

我重写RenderItem方法如下:

protected override void RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer)
{
    ListItem item = Items[repeatIndex];
    String id = ClientID + "_" + repeatIndex.ToString();
    String name = UniqueID + "$" + repeatIndex.ToString();
    writer.Write(@"<li class='{0}'>", "tcsdrp_day" + (item.Selected ? " selected" : ""));
    writer.Write(@"<input id='{0}' type='checkbox' name='{1}' value='{2}'>", new object[] { id, name, item.Value });
    writer.Write(@"<label for='{0}'>{1}</label>", new object[] { id, item.Text });
    writer.Write(@"</li>");
}

然而,我得到了一堆空白的li,所以很明显,它们是在调用者中呈现的,或者在其他地方,我不能为我的生活工作。

现在通过将类添加到listtitems来绕过它,但这会创建一个额外的SPAN,我理想地希望删除它。

有什么好办法吗?

编辑:这是一个缩减的演示;最终版本将有逻辑生成基于原始数据项属性的不同类,以防有人想知道为什么我需要添加一个类。

编辑2:我现在已经通过改变RenderItem使用label- wrapped -the-input样式来简化标记的直接问题:
writer.Write(@"<label class='{0}'>", labelclass);
writer.Write(@"<input id='{0}' type='checkbox' name='{1}' value='{2}'{3}>", new object[] { id, name, item.Value, item.Selected ? " checked" : "" });
writer.Write(item.Text);
writer.Write(@"</label>");

我仍然想知道是否有任何方法可以完全自定义项目渲染。

自定义呈现CheckBoxList项,以便在LI上设置类

在PreRender事件中,遍历Items-Collection,并根据需要分配类:

For Each l As ListItem In Items
  If l.Value = "1" Then
    l.Attributes.Add("class", "myClass")
  End If
Next l