我正在编写RenderContents()
我的 ASP.NET 服务器控件的方法。该方法使用HtmlTextWriter
对象来呈现输出内容。对于我正在编写的控件,使用HtmlTextWriter
's 方法似乎需要很多代码行来打开和关闭每个标签并将每个属性添加到流中。最后,我觉得我最终会得到比它需要的更长的代码。
我在想,如果我使用一个可链接的类,例如StringBuilder
,我的代码会更容易阅读和编写。
我想知道的是,是否有任何理由使用该HtmlTextWriter
对象来呈现我的整个控件的内容?除了安全检查(我假设)之外,它还包括确保您不会以错误的顺序编写标签或创建无效标记,我看不出任何原因。
似乎只做这样的事情会更容易:
protected override void RenderContents(HtmlTextWriter output)
{
StringBuilder s = new StringBuilder();
s.Append("lots")
.Append("of")
.Append("strings");
output.BeginRender();
output.Write(s.ToString());
output.EndRender();
}
有什么理由说明这是一个坏主意吗?
更新
响应Mehrdad Afshari的回答:
我并没有过多考虑StringBuilder
实例化单独对象的内存要求。为 HtmlTextWriter 制作一个包装器怎么样,这样它就可以被链接起来,这样就不会产生额外的字符串。
public class ChainedHtmlTextWriter
{
private HtmlTextWriter _W;
public ChainedHtmlTextWriter(HtmlTextWriter writer)
{
_W = writer;
}
public ChainedHtmlTextWriter Write<T>(T value)
{
_W.Write(value);
return this;
}
public ChainedHtmlTextWriter WriteLine<T>(T value)
{
_W.WriteLine(value);
return this;
}
}