2015-11-12 6 views
9

は私が私はASP.NET 5を使用しています

IIHtmlContentASP.NET 5Microsoft.AspNet.Html.Abstractions名前空間の一部であるStringにIHtmlContentを変換する必要がC#で文字列にIHtmlContent/TagBuilderを変換しTagBuilder

簡体実装インタフェースがあります私はそれを

string output = GetContent().ToString(); 
を参照するとき、私は次のような方法

public static IHtmlContent GetContent() 
{ 
    return new HtmlString("<tag>blah</tag>"); 
} 

を持っています

は私がGetContentメソッド()のために、以下の出力を得る

"Microsoft.AspNet.Mvc.Rendering.TagBuilder" 

はなく、私は

私もStringBuilderの

StringBuilder html = new StringBuilder(); 
html.Append(GetContent()); 

だけでなく、それを使ってみましたが欲しい

<tag>blah</tag> 

同じ名前空間を追加します。文字列値

は、私は、文字列

どのように私はIHtmlContentまたはTagBuilderは、文字列に変換しないに変換する方法を持っていないTagBuilder

TagBuilder content = (TagBuilder)GetContent(); 

しかしTagBuilderにキャストしようとしましたか?

+0

「ToHtmlString」についてはどうですか?また、 'IHtmlContent'はどこから取得しますか? –

+1

私は 'HtmlString'クラスのメソッドを参照していました。 'IHtmlContent'のドキュメンテーションを教えてください。それはMSDNにあるようではありません –

答えて

12

あなたがする必要があるすべては、文字列などのコンテンツは、ちょうどこのメソッドを追加し、文字列の出力を得るためのパラメータとしてごIHtmlContentオブジェクトを渡す出力の場合:

public static string GetString(IHtmlContent content) 
{ 
    var writer = new System.IO.StringWriter(); 
    content.WriteTo(writer, new HtmlEncoder()); 
    return writer.ToString(); 
} 

あなたはなぜ再考することをお勧めしますTagBuilderのようにこのアプローチをとってみれば、あなたが考えることができるあらゆるタイプのカスタムHTMLが可能になります。おそらく手動でテキストを出力する必要はありません。上記の回答に追加

+0

良い答え..これは私が探していたものです。 – d234

+4

asp.vnextコアで動作しません。代わりに 'HtmlEncoder.Default'を使用してください – NucS

12

Microsoft.Extensions.WebEncoders名前空間を除去し、新しいHtmlEncoderクラスが新しい名前空間System.Text.Encodings.Webに移動したとしてHtmlEncoderの新しいインスタンスは、ASP.NETコアRTMでは動作しませんが、このクラスは、抽象クラスと密閉クラスとして作成されるため、新しいインスタンスまたはそこから派生クラスを作成することはできません。

メソッドに渡すHtmlEncoder.Default、それは慎重な最適化の

public static string GetString(IHtmlContent content) 
{ 
    var writer = new System.IO.StringWriter(); 
    content.WriteTo(writer, HtmlEncoder.Default); 
    return writer.ToString(); 
} 
7

ASP.NETコア実際に導入された一握りに動作します。

public static IHtmlContent GetContent(this IHtmlHelper helper) 
{ 
    var content = new HtmlContentBuilder() 
        .AppendHtml("<ol class='content-body'><li>") 
        .AppendHtml(helper.ActionLink("Home", "Index", "Home")) 
        .AppendHtml("</li>"); 

    if(SomeCondition()) 
    { 
     content.AppendHtml(@"<div> 
      Note `HtmlContentBuilder.AppendHtml()` is Mutable 
      as well as Fluent/Chainable. 
     </div>"); 
    } 

    return content; 
} 

最後にかみそりビューで、私たちも、もう@Html.Raw(Html.GetContent())を必要としない(ASP.NETで必要とされるように使用:あなたがHTMLの拡張メソッドを構築している場合は、最も効率的な方法は、文字列を避けるためですMVC 5)、ちょうど@Html.GetContent()を呼び出すだけで十分です。そして、Razorはエスケープするすべてのビジネスを世話します。

関連する問題