adr*_*ico 6 vb.net asp.net htmlgenericcontrol
我正在从代码后面的某个网页添加一些内容.当我想在一些文本后添加一个中断时,我尝试这样做:
pDoc.Controls.Add(New Label With {.Text = "whatever"})
pDoc.Controls.Add(New HtmlGenericControl("br"))
Run Code Online (Sandbox Code Playgroud)
,其中pDoc是Panel我正在添加内容的地方.但它br在最终的HTML中添加了两个标签.
我这样避免这种行为:
pDoc.Controls.Add(New Label With {.Text = "whatever" & "<br />"})
Run Code Online (Sandbox Code Playgroud)
无论如何,我很好奇,我想知道为什么
pDoc.Controls.Add(New HtmlGenericControl("br"))
Run Code Online (Sandbox Code Playgroud)
这样做.我也认为我的方法不太花哨.
问候,
Ber*_*ncı 22
其实你可以用;
pDoc.Controls.Add(new LiteralControl("<br/>"));
Run Code Online (Sandbox Code Playgroud)
虽然new HtmlGenericControl("br")增加了两个<br>,但这只会<br/>为您的HTML 添加标记,以便您只有1个空格行.在这张图片中,我添加了那些代码块的中断.

这里也有类似的问题:服务器控制行为奇怪
经过一些测试后看起来原因是HtmlGenericControl不支持自我关闭.在服务器端,HtmlGenericControl("br")它被视为:
<br runat="server"></br>
Run Code Online (Sandbox Code Playgroud)
</br>HTML中没有标记,因此浏览器显示它,因为有两个<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"); }
}
}
Run Code Online (Sandbox Code Playgroud)
而是使用它:
pDoc.Controls.Add(New Label With {.Text = "whatever"})
pDoc.Controls.Add(New HtmlGenericSelfCloseControl("br"))
Run Code Online (Sandbox Code Playgroud)
作为一个更简单的替代方案(如果您参考了Page),您可以尝试使用Page.ParseControl:
pDoc.Controls.Add(New Label With {.Text = "whatever"})
pDoc.Controls.Add(Page.ParseControl("br"))
Run Code Online (Sandbox Code Playgroud)