2011-01-04 15 views
26

Razor View Engineを使用すると、文字列をページに直接出力するたびに、HTMLエンコードされます。例えば:新しいRazor View Engineでは、HtmlHelpersが文字列またはIHtmlStringを返すべきですか?

としてブラウザに表示されます
<p>Hello World </p> 

<P>のHello World </P >

@"<p>Hello World</p>" 

は、実際には、ページへの出力が得られます

これは問題ですが、Htmlヘルパーを作成するときに、今までは古いaspxビューエンジンを使用していましたが、文字列をブラウザに出力します。

<%= Html.MyCoolHelperMethod(); %> 

私の質問は基本的にこれです。私はちょうど私のCSHTMLでこれを行うことができ、その場合には

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) 
{ 
    return new helper.Raw("<p>Hello World</p>"); 
} 

@Html.MyCoolHelperMethod(); 

または私はこれを行うか:私はする必要があり、その場合に

public static string MyCoolHelperMethod(this HtmlHelper helper) 
{ 
    return "<p>Hello World</p>"; 
} 

を私はこれを行うのですか私のcshtmlで仕事をしてください:

@Html.Raw(Html.MyCoolHelperMethod()); 

明らかに最初の承認achはビューをもっときれいに見せてくれますが、実際に助手がIHtmlStringを返すのが共通のパターンであるかどうか、私は過去に間違っていますか?

+0

これを見てください:http://stackoverflow.com/questions/2293357/what-is-an-mvchtmlstring-and-when-should-i-use-itあなたはIHtmlStringを返すべきです – LukLed

答えて

38

ほとんどの場合、IHtmlStringのインスタンスを返す必要があります。それは組み込みのヘルパー*の後ろにあるパターンです。ヘルパーの消費者がアンダー・オーバーまたはエンコードを心配する必要はありません。

Raw関数を使用する代わりに、おそらくちょうどHtmlStringの新しいインスタンスを返すべきです。

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) { 
    return new HtmlString("<p>Hello World</p>"); 
} 

* MVC 3は、実際にそのヘルパーの戻り値の型としてMvcHtmlStringを使用していますが、これはMVC 2日からホールドオーバであることに注意してください。 (複雑な話ですが、簡潔に言えば、IHtmlStringは.NET 4でのみ導入され、MVC 2では.NET 3.5がサポートされているため、MvcHtmlStringタイプが中間ステップとして導入されました)。 MVC 3以上をターゲットとするすべてのヘルパーはIHtmlStringを返します。

+0

"MVC 3をターゲットとするすべてのヘルパーとより高いIHtmlStringを返す必要があります。 - 私が知る必要があっただけ! –

関連する問題