字符串连接或 HtmlGenericControl html 控件

本文关键字:html 控件 HtmlGenericControl 连接 字符串 | 更新日期: 2023-09-27 18:30:42

我正在尝试使用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( );
        }

字符串连接或 HtmlGenericControl html 控件

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

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>");

HtmlTextWriter 之所以好,是因为:

  1. HtmlTextWriter是最干净的,标记很好地缩进了当它被呈现时。 当 HtmlTextWriter 直接写入输出流时,会对性能产生影响。
  2. HtmlTextWriter 支持自动编码 HTML

字符串生成器不会写入输出流,直到调用 ToString 为止。