2012-04-11 40 views
0

我正在尝试使用ListView来生成复杂的项目列表。对于每一个项目我必须创建这样的字符串串联或HtmlGenericControl html控件?

<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> 

我的问题是什么是更好的方式使用字符串连接这样

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

或使用HtmlGenericControl这样生成html.By:

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(); 
     } 
+1

'string.Format',或'StringBuilder.AppendFormat'经常在这里很有用,比如当你有动态文本的跨度,你可以有'sb.AppendFormat( “ {0}”,getSpanContent ());”它使大多数静态XML在代码中更具可读性。如果它是多行的,你也可以使用'@“”'作为一个多行代码的HTML字符串,并且有很多插入数据的{}插入。 – Servy 2012-04-11 18:11:14

回答

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

的HtmlTextWriter是好事,因为:

  1. 的HtmlTextWriter是最干净和加价是很好缩进 呈现时。 HtmlTextWriter直接写入输出流会产生性能影响。
  2. 的HtmlTextWriter支持编码HTML自动直到的ToString上调用它

StringBuilder的不写入到输出流。