2012-12-20 11 views
6

Ich habe eine CheckBoxList (Framework Version 4), mit der RepeatLayout auf UnOrderedList gesetzt. Ich würde gerne eine Klasse auf jedem LI generieren, um einige Client-Seiten zu kodieren und zu formatieren, aber ich bekomme es nicht.Benutzerdefinierte render CheckBoxList Elemente, um eine Klasse auf der LI

ich die RenderItem Methode überschreiben, wie folgt:

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>"); 
} 

Allerdings bekomme ich eine Ladung leere LIs erzeugt, so offensichtlich sie in dem Anrufer wiedergegeben werden, oder irgendwo anders, und ich kann nicht für das Leben von mir trainieren wo.

Um es jetzt durch Hinzufügen der Klasse zu den ListItems, aber das schafft eine zusätzliche SPAN, die ich gerne verlieren würde.

Gibt es eine gute Möglichkeit, dies zu tun?

EDIT: Dies ist eine Demo-Demo; Die finale Version wird Logik haben, um verschiedene Klassen basierend auf den Eigenschaften des ursprünglichen Datenelements zu generieren, falls jemand sich fragt, warum ich überhaupt eine Klasse hinzufügen muss.

EDIT 2: Ich habe jetzt um meine unmittelbare Problem der Vereinfachung der Markup bekam durch die RenderItem Ändern der Etikettenwickel-the-Eingabemethode zu verwenden:

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>"); 

Ich würde noch gerne wissen, ob Es gibt jedoch eine Möglichkeit, das Rendern von Elementen vollständig anzupassen.

Antwort

1

Im PreRender Fall durchlaufen die Artikel-Collection und Klassen zuordnen, wie Sie benötigen:

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