2016-05-20 22 views
0

我已經嘗試了這兩種不同的方法..在論壇上這也不是很多。Taghelper使用Tagbuilder和stringbuilder呈現output.precontent的問題

我試圖創建一個自定義標籤幫助緩慢構建它,因爲我向前邁進。它產生一個動態菜單,但我沒有從字符串生成器得到正確的輸出。

我想產生這樣的precontent:

 <div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 

,這對於postcontent:

  </ul> 
     </div> 

我打算添加爲output.precontent和output.postcontent。我還決定爲每個標籤使用tagbuilder方法,並將它們添加到一個stringbuilder,最後將其作爲前面提到的前提。這是我想出的。

 StringBuilder PreContentSb = new StringBuilder(); 

     StringBuilder PostContentSb = new StringBuilder(); 

     TagBuilder divTag = new TagBuilder("div"); 
     TagBuilder ul = new TagBuilder("ul"); 

     divTag.MergeAttribute("class", "navbar - collapse collapse"); 
     divTag.TagRenderMode = TagRenderMode.SelfClosing; 

     ul.MergeAttribute("class", "nav navbar - nav"); 
     ul.TagRenderMode = TagRenderMode.SelfClosing; 

     PreContentSb.Append(' ', 12); 
     PreContentSb.Append(divTag.InnerHtml.ToString()); 
     PreContentSb.Append(Environment.NewLine); 
     PreContentSb.Append(' ', 16); 
     PreContentSb.Append(ul.ToString()); 
     PreContentSb.Append(Environment.NewLine); 

     output.PreContent.SetContent(PreContentSb.ToString()); 

     PostContentSb.Append(' ', 16); 
     PostContentSb.Append("</ul>"); 
     PreContentSb.Append(Environment.NewLine); 
     PostContentSb.Append(' ', 12); 
     PostContentSb.AppendLine("</div>"); 
     PreContentSb.Append(Environment.NewLine); 

     output.PostContent.SetContent(PostContentSb.ToString()); 

的taghelper是隻在一個地方去,所以我想我會縮進那個地方與如啓動「PreContentSb.Append(」」,12);」 ..

我的問題得到的是,當我看着頁面的源代碼我得到,這些標籤如下:

  Microsoft.Extensions.Internal.BufferedHtmlContent&#xD;&#xA;    Microsoft.AspNet.Mvc.Rendering.TagBuilder&#xD;&#xA;    &lt;/ul&gt;   &lt;/div&gt;&#xD;&#xA; 

的首先它不是呈現在所有tagbuilt標籤,其次代替引號和尖括號其顯示實際字符實體引用..

如何簡單顯示引號,尖括號?

最後如何渲染一個字符串構建器中的tagbuilder元素?

回答

1
  1. TagBuilder沒有一個覆蓋到ToString()。您必須使用WriteTo()來編寫它的內容(即在TextWriter中)。

  2. 爲防止逃跑,您必須退回HtmlString。請查看我的回答here瞭解如何返回未被模板引擎編碼的刺痛。這個例子是關於屬性,但它應該給你如何做到這一點的想法,即output.PostContent.SetContent(new HtmlString(PostContentSb.ToString()));

+0

快速的問題 - 我如何使用的writeTo()將TagBuilder的內容添加到StringBuilder? (將對此投票) – si2030

+0

var writer = new System.IO.StringWriter(); divTag.WriteTo(writer,new HtmlEncoder()); var s = writer.ToString(); – si2030