我有一个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,所以很明显它们是在调用者或其他地方呈现的,而且我不能为我的生活在哪里工作。
现在通过将类添加到ListItems来解决它,但是这会创建一个额外的SPAN,我希望丢失它。
有没有好办法呢?
编辑:这是一个减少的演示;最终版本将具有基于原始数据项属性生成不同类的逻辑,以防有人想知道为什么我需要添加一个类。
编辑2:我现在已经解决了通过更改RenderItem以使用标签包装输入样式来简化标记的直接问题:
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>");
我仍然想知道是否有任何方法可以完全自定义项目渲染。
答案 0 :(得分:1)
在PreRender事件中,遍历Items-Collection,并根据需要分配类:
For Each l As ListItem In Items
If l.Value = "1" Then
l.Attributes.Add("class", "myClass")
End If
Next l