2012-04-11 68 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的不寫入到輸出流。