我有一个我写的服务器控件,通常可以正常工作。但是,当我添加突出显示的行时,它会添加一个而不是两个<br />
元素,这不是我所追求的。
mounting=new DropDownLabel();
mounting.ID="mountTypeList";
mounting.Attributes.Add("class", "mounting");
mounting.Values=Configuration.MountTypes.GetConfiguration().Options;
mounting.Enabled=Utilities.UserType == UserType.Admin;
mounting.Value=value.Reference;
td1.Controls.Add(mounting);
**td1.Controls.Add(new HtmlGenericControl("br"));**
var span=new HtmlGenericControl("span");
span.Attributes.Add("class", "mountDescription");
span.ID="mountDescription";
td1.Controls.Add(span);
对我做错了什么的想法?
ETA:
我已经通过使用jquery添加br解决了这种情况,无论如何我都在那里使用它。但我看到的行为肯定是错的。如果我添加一个元素,它应该添加该元素,而不是该元素的两倍。
答案 0 :(得分:4)
HtmlGenericControl
会生成包含开始和结束标记的<br>
和</br>
相反,你可以使用new LiteralControl("<br/>")
来做你想做的事。
修改
要解决此问题,您需要自己实施HtmlGenericControl
,并针对没有关联开关标签的情况进行扩展。
public class HtmlGenericSelfClosing : HtmlGenericControl
{
public HtmlGenericSelfClosing()
: base()
{
}
public HtmlGenericSelfClosing(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 cannot have child controls"); }
}
public override string InnerHtml
{
get { return String.Empty; }
set { throw new Exception("Self-closing tag cannot have inner content"); }
}
public override string InnerText
{
get { return String.Empty; }
set { throw new Exception("Self-closing tag cannot have inner content"); }
}
}