7

コードビハインドから特定のWebページにコンテンツを追加しています。テキストの後に休憩を追加したい場合は、次のようにします。

pDoc.Controls.Add(New Label With {.Text = "whatever"})
pDoc.Controls.Add(New HtmlGenericControl("br"))

、ここで、pDocはPanelコンテンツを追加する場所です。brただし、最終的なHTMLに2つのタグが追加されます。

私はこの振る舞いをこのように避けました:

pDoc.Controls.Add(New Label With {.Text = "whatever" & "<br />"})

とにかく、私はとても興味があり、理由を知りたいです

pDoc.Controls.Add(New HtmlGenericControl("br"))

そのように行動しています。また、私のアプローチはあまり派手ではないと思います。

よろしく、

4

2 に答える 2

26

実際に使用できます。

pDoc.Controls.Add(new LiteralControl("<br/>"));

new HtmlGenericControl("br")2つ追加しますが、これはHTMLにタグを<br>追加するだけなので、スペース行は1つだけです。<br/>この写真では、そのコードブロックでこれらのブレークを追加しました。

ここに画像の説明を入力してください

ここでも同様の質問:サーバー制御が奇妙に動作する

于 2013-02-04T07:59:21.317 に答える
5

いくつかのテストの後、理由はセルフクロージングHtmlGenericControlをサポートしていないようです。サーバー側では、は次のように扱われます。HtmlGenericControl("br")

<br runat="server"></br>

</br>HTMLにはタグがないため、<br />タグが2つあるため、ブラウザに表示されます。これを回避する良い方法は、次のように作成することHtmlGenericSelfCloseControlです(C#コードについては申し訳ありませんが、VB.NETでこれを書き直すことに問題はありません)。

public class HtmlGenericSelfCloseControl : HtmlGenericControl
{
    public HtmlGenericSelfCloseControl()
        : base()
    {
    }

    public HtmlGenericSelfCloseControl(string tag)
        : base(tag)
    {
    }

    protected override void Render(HtmlTextWriter writer)
    {
        writer.Write(HtmlTextWriter.TagLeftChar + this.TagName);
        Attributes.Render(writer);
        writer.Write(HtmlTextWriter.SelfClosingTagEnd);
    }

    public override ControlCollection Controls
    {
        get { throw new Exception("Self closing tag can't have child controls"); }
    }

    public override string InnerHtml
    {
        get { return String.Empty; }
        set { throw new Exception("Self closing tag can't have inner content"); }
    }

    public override string InnerText
    {
        get { return String.Empty; }
        set { throw new Exception("Self closing tag can't have inner text"); }
    }
}

そして代わりにそれを使用してください:

pDoc.Controls.Add(New Label With {.Text = "whatever"})
pDoc.Controls.Add(New HtmlGenericSelfCloseControl("br"))

より簡単な代替手段として(参照している場合Page)、以下を使用してみることができますPage.ParseControl

pDoc.Controls.Add(New Label With {.Text = "whatever"})
pDoc.Controls.Add(Page.ParseControl("br"))
于 2012-11-21T13:21:35.897 に答える