我正在编写RenderContents()ASP.NET服务器控件的方法.该方法使用HtmlTextWriter对象来呈现输出内容.对于我正在编写的控件,使用这些HtmlTextWriter方法似乎需要很多行代码来打开和关闭每个标记并将每个属性添加到流中.最后,我觉得我最终会得到比它需要的时间长得多的代码.
我在想,如果我使用了一个可链接的类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();
}
Run Code Online (Sandbox Code Playgroud)
有什么理由说这是个坏主意吗?
更新
响应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;
}
}
Run Code Online (Sandbox Code Playgroud) asp.net stringbuilder servercontrols htmltextwriter method-chaining