字符串连接或HtmlGenericControl html控件?

时间:2012-04-11 18:01:34

标签: c# asp.net html

我正在尝试使用ListView生成复杂的项目列表。对于每个项目,我必须创建这样的东西

<div>
  <ul>
    <li>foo<li>
    <li>bar<li>
    .... Dynamic count of <li>
  <ul>
  <span>Some dynamic text</span>
  .. bunch of other dynamicly generated html
</div>

我的问题是什么是生成html的更好方法。使用像这样的字符串连接

StringBuilder sb = new StringBuilder();
sb.Append("<div>");
.......
sb.Append("</div>")

或者像这样使用HtmlGenericControl:

   HtmlGenericControl htmlItem = new HtmlGenericControl( "div" );
   ....

   using( TextWriter textWriter = new StringWriter( ) )
        using( HtmlTextWriter htmlWriter = new HtmlTextWriter( textWriter ) )
        {
            HtmlGenericControl htmlItem = null;

            CreateMenuItem( menuItem, 0, null );

            htmlItem.RenderControl( htmlWriter );

            return textWriter.ToString( );
        }

2 个答案:

答案 0 :(得分:2)

我更喜欢这种方式,因为这给了我更多可读性。看着这个,我可以很容易想象,我的输出会是什么样子。

StringBuilder sb = new StringBuilder();
sb.Append("<div>");
sb.Append("<ul>");
sb.Append("<li>Item1</li>");
sb.Append("<li>Item2</li>");
sb.Append("<li>Item3</li>");
sb.Append("</ul>");
sb.Append("</div>");

答案 1 :(得分:2)

HtmlTextWriter很好,因为:

  1. HtmlTextWriter是最干净的,标记很好地缩进 什么时候渲染。      由于HtmlTextWriter直接写入输出流,因此会对性能产生影响。
  2. HtmlTextWriter支持自动编码HTML
  3. Stringbuilder在写入ToString之前不会写入输出流。