これは、ファイルのPage_Load
イベントの背後にあるコードの以下のコードです。
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
PlaceHolder1.Controls.Add(linkButton);
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
PlaceHolder1.Controls.Add(label);
生成された各コントロールの間に改行が必要です。
ただし、改行の問題の解決策は以下のとおりです。ただし、Page_Loadイベントでこれを行うと、イベントハンドラーが機能せず、ページライフサイクルの問題が発生します。基本的に、イベントハンドラーがPostBackで起動するには、ページライフサイクルの早い段階でこれらの動的コントロールを作成する必要があります。この問題が発生した場合は、コードをOnInitメソッドに移動してみてください。
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
PlaceHolder1.Controls.Add(linkButton);
//Add This
PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
PlaceHolder1.Controls.Add(label);
別の解決策は、各コントロールをパネルに追加することです。これにより、各コントロールが<div>
でレンダリングされ、目的の効果が得られます。
私にとって、これはより動的です。なぜなら、コントロールのいずれかを非表示にすると、divが折りたたまれ、空の行が残らないからです。
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
//Add control to a panel, add panel to placeholder
Panel lbPan = new Panel();
lbPan.Controls.Add(linkButton);
PlaceHolder1.Controls.Add(lbPan);
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
//Add control to a panel, add panel to placeholder
Panel lblPan = new Panel();
lblPan.Controls.Add(label);
PlaceHolder1.Controls.Add(lblPan);
方法:プログラムでASP.NET Webページにコントロールを追加する
場合によっては、静的テキストとコントロールの両方を作成したいことがあります。 静的テキストを作成するには、リテラルまたはラベルWebサーバーコントロールを使用できます。その後、他のコントロールと同じように、これらのコントロールをコンテナに追加できます。実行時に作成されるコントロールのビューステートについては、「動的Webサーバーコントロール」および「ビューステート」を参照してください。