0

サーバーコントロール(ハイパーリンク)を現在のチェックボックスリスト(データベースから既に結合されている)に追加しようとしています。これがコードです。実行されますが、コントロールはレンダリングされず、チェックボックスリストに表示されます。

protected void Page_PreRender(object Sender, EventArgs e)
    {
        chkAttribute.Items.Cast<ListItem>().ToList().ForEach(s =>
        {
            System.Web.UI.WebControls.HyperLink h = new HyperLink();
            h.Text = s.Value;
            string url = "~/Default.aspx?Item=" + Server.UrlEncode(s.Value);
            h.NavigateUrl = url;
            chkAttribute.Controls.Add(h);

        });
    } 

何が問題なのですか。コントロールをイミディエイトウィンドウにチェックインすると、追加されたコントロールが表示されますが、ページには表示されません。

4

1 に答える 1

0

いいえ、HyperLinkコントロールはCheckBoxListにレンダリングされません。

問題はコントロールに限定されるものではなく、コントロールHyperLinkを除く他のすべてのものです。フレームワークが例外を返さない場合でも、のではないコントロールをlikeまたはListItemに追加するコードを記述すると、追加したコントロールは同様に表示されます。ListItemListControlCheckBoxListDropDownList

これが発生する可能性がある理由ListControlは、コンテンツをレンダリングするときに、ListItemコントロールのみがページに書き込まれ、他の種類のコントロールは無視されるためです。以下に示すものとよく似ています。

for (int i = 0; i < this.Controls.Count; i++)
{
   if ((this.Controls(i)) is ListItem)
   {
      //Render 
   }
}

Controlsコレクションは単なるデータコレクションであることに気付くかもしれません。それらをレンダリングするかどうかは、完全にコンテナ次第です。ページディレクティブで[トレース]オプションをオンにすると、追加したリテラルコントロールがCheckBoxList:のノードであることがわかります。これは、HTMLにまったくレンダリングされません。

于 2012-12-24T07:23:54.770 に答える