经过一些测试后,看起来原因是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"))