C# 在LI上设置类的自定义渲染复选框列表项
我有一个复选框列表(框架版本4),RepeatLayout设置为UnOrderedList。我想在每个LI上生成一个类,以简化一些客户端编码和样式,但是,我无法得到它 我覆盖RenderItem方法,如下所示:C# 在LI上设置类的自定义渲染复选框列表项,c#,asp.net,C#,Asp.net,我有一个复选框列表(框架版本4),RepeatLayout设置为UnOrderedList。我想在每个LI上生成一个类,以简化一些客户端编码和样式,但是,我无法得到它 我覆盖RenderItem方法,如下所示: protected override void RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer) { ListItem item = I
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>");
}
protected override void RenderItem(ListItemType itemType,int repeatIndex,RepeatInfo RepeatInfo,HtmlTextWriter writer)
{
ListItem项目=项目[重复索引];
字符串id=ClientID+“”+repeatIndex.ToString();
字符串名称=UniqueID+“$”+repeatIndex.ToString();
writer.Write(@“”,“tcsdrp_day”+(item.Selected?“Selected”);
writer.Write(@“”,新对象[]{id,name,item.Value});
writer.Write(@“{1}”,新对象[]{id,item.Text});
writer.Write(@“ ”);
}
然而,我得到了大量生成的空白LIs,所以很明显它们是在调用者或其他地方呈现的,我一生都无法确定它们在哪里
现在通过将类添加到ListItems中解决了这个问题,但这会创建一个额外的跨度,理想情况下我希望失去这个跨度
有什么好办法吗
编辑:这是一个精简的演示;最终版本将具有基于原始数据项属性生成不同类的逻辑,以防有人想知道我为什么需要添加类
编辑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>");
writer.Write(@“”,labelclass);
writer.Write(@“”,新对象[]{id,名称,item.Value,item.Selected?“选中”:“});
writer.Write(item.Text);
作者:写(@“);
我仍然想知道是否有任何方法可以完全自定义项目呈现。在PreRender事件中,迭代项目集合,并根据需要分配类:
For Each l As ListItem In Items
If l.Value = "1" Then
l.Attributes.Add("class", "myClass")
End If
Next l