web-dev-qa-db-ja.com

プレースホルダーで動的に生成されたラベルの間に改行を作成するにはどうすればよいですか?

これは、ファイルの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);

生成された各コントロールの間に改行が必要です。

16
Maddy.Shik

ただし、改行の問題の解決策は以下のとおりです。ただし、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);
40
Eoin Campbell

別の解決策は、各コントロールをパネルに追加することです。これにより、各コントロールが<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);
4
Thymine

方法:プログラムでASP.NET Webページにコントロールを追加する

場合によっては、静的テキストとコントロールの両方を作成したいことがあります。 静的テキストを作成するには、リテラルまたはラベルWebサーバーコントロールを使用できます。その後、他のコントロールと同じように、これらのコントロールをコンテナに追加できます。実行時に作成されるコントロールのビューステートについては、「動的Webサーバーコントロール」および「ビューステート」を参照してください。

1
Iman Abidi