7

我正在从后面的代码向给定的网页添加一些内容。当我想在一些文本之后添加中断时,我尝试这样做:

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

,其中 pDoc 是Panel我在其中添加内容的位置。但是它br在最终的 HTML 中添加了两个标签。

我以这种方式避免了这种行为:

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")添加了两个<br>,但这只会将<br/>标签添加到您的 HTML 中,因此您只有 1 个空格行。在这张图片中,我使用该代码块添加了这些中断。

在此处输入图像描述

这里也有类似的问题:服务器控制行为奇怪

于 2013-02-04T07:59:21.317 回答
5

经过一些测试后,看起来原因是HtmlGenericControl不支持自关闭。在服务器端,HtmlGenericControl("br")被视为:

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

HTML中没有</br>标签,因此浏览器显示为有两个<br />标签。解决这个问题的好方法是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 回答