2012-12-20 7 views
6

私はCheckBoxList(フレームワークバージョン4)を持ち、RepeatLayoutをUnOrderedListに設定しました。クライアント側のコーディングとスタイリングを単純化するために各LIにクラスを生成したいと思いますが、それを得ることはできません。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を作成します。

これを実行する良い方法はありますか?

EDIT:これは短縮版のデモです。最終バージョンには、元のデータ項目のプロパティに基づいて異なるクラスを生成するロジックが用意されているので、なぜクラスを追加する必要があるのか​​不思議です。

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

私はまだかどうかを知りたいのですがしかし、アイテムのレンダリングを完全にカスタマイズする方法はあります。 PreRenderイベントで

答えて

1

、アイテム・コレクションを反復処理し、あなたが必要とするようなクラスを割り当てます。

For Each l As ListItem In Items 
    If l.Value = "1" Then 
    l.Attributes.Add("class", "myClass") 
    End If 
Next l 
関連する問題