2016-05-20 5 views
0

私はこの2つの異なる方法を試しました。これはフォーラムでも大したことではありません。TagbuilderとTagbuilderとstringbuilderを使用してoutput.precontentをレンダリングするときの問題

私は前進しながらゆっくりと構築するカスタムタグヘルパーを作成しようとしています。その動的メニューを生成するには、しかし、私は文字列ビルダーから正しい出力を得ていない。

私はprecontentのためにこれを生成しようとしています:

postcontentため
 <div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 

と、この:

  </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タグをレンダリングし、第二の代わりに引用符や角度のないの最初に実際の表示のをブラケット:取得は、私はページのソースを見ると、私はこれらのタグは、以下のために、取得していますということです文字エンティティ参照。

括弧でくくられたカンマを単に表示するにはどうすればよいですか?

最後に、タグビルダ要素を文字列ビルダでどのようにレンダリングしますか?

答えて

1
  1. TagBuilderToString()にオーバーライドを持っていません。内容を書き込むにはWriteTo()を使用する必要があります(つまり、TextWriter)。

  2. エスケープを防ぐには、HtmlStringを返す必要があります。私の答えhereで、テンプレートエンジンによってエンコードされていない刺し身を返す方法をチェックしてください。すなわちoutput.PostContent.SetContent(new HtmlString(PostContentSb.ToString()));

+0

簡単な質問、例では、属性についてですが、それはあなたにそれを行う方法についてのアイデアを与える必要があります - どのように私はのwriteToは()のStringBuilderにTagBuilderの内容を追加するために使用しますか? (これを投票します) – si2030

+0

var writer = new System.IO.StringWriter(); divTag.WriteTo(ライター、新しいHtmlEncoder()); var s = writer.ToString(); – si2030

関連する問題