2012-04-26 11 views
21

私はMVCプロジェクトを作成しています。 MVC 4とRazorを使用する。いくつかのページを作成した後、私は思っていた:あなたはそれを理解するために、ここで私を助けることができればいいだろうMvcHtmlString.Create()とHtml.Raw()の相違点

MvcHtmlString.Create() 

Html.Raw() 

の違いは何ですか。

ありがとうございます!

答えて

21

これは、ASP.NET(http://aspnetwebstack.codeplex.com)で利用できるソースコードを見る絶好の機会です。

HtmlHelper.csを見ると、これはHtml.Raw()のコードです:

public IHtmlString Raw(string value) 
{ 
    return new HtmlString(value); 
} 

public IHtmlString Raw(object value) 
{ 
    return new HtmlString(value == null ? null : value.ToString()); 
} 

そして、これがMvcHtmlStringクラスのコードです:

namespace System.Web.Mvc 
{ 
    public sealed class MvcHtmlString : HtmlString 
    { 
     [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes", Justification = "MvcHtmlString is immutable")] 
     public static readonly MvcHtmlString Empty = Create(String.Empty); 

     private readonly string _value; 

     public MvcHtmlString(string value) 
      : base(value ?? String.Empty) 
     { 
      _value = value ?? String.Empty; 
     } 

     public static MvcHtmlString Create(string value) 
     { 
      return new MvcHtmlString(value); 
     } 

     public static bool IsNullOrEmpty(MvcHtmlString value) 
     { 
      return (value == null || value._value.Length == 0); 
     } 
    } 
} 

最も大きな違いはHtml.Raw()のいずれかを受け入れることですオブジェクトですが、MvcHtmlString.Create()は文字列のみを受け入れます。 また、Html.Raw()はインターフェイスを返し、CreateメソッドはMvcHtmlStringオブジェクトを返します。 最後に、Createはnullを扱う方法が異なります。

+0

その答えをありがとう!しかし、これらのうちのどれが優先されるべきですか? – Julian

+2

@Julian:コードの場所とアクセスしやすい場所によって異なります。 Ususally私はどちらも使用しない、私はちょうど '新しいHtmlString()'を使用します。 – Guffa

+1

@Julian Like Guffa said:あなたのコードがどこにあるかによって異なります。ビューで私はHtml.Rawが好きですが、それは主にコードを読むときに美しいものであるからです(本当に良い議論ではありません)。 –

5

実際的な違いはありません。 Html.Raw方法はHtmlStringのインスタンスを作成し、しかしMvcHtmlStringちょうどHtmlStringから継承するので、彼らは同じように機能しながら

MvcHtmlString.Createは、MvcHtmlStringのインスタンスを作成します。

+0

ちょうど質問です:MsdnはHtml.Raw()について:HTMLコード化されていないマークアップを返します。/for MvcHtmlString.Create:指定したテキスト値を使用してHTMLエンコードされた文字列を作成します。だから:エンコードされた/エンコードされていないHTMLは、 "実用的な違い"ではない、または私は何かが恋しい? –

+1

@RaphaëlAlthaus:結果はまったく同じですが、説明が異なるだけです。 'IHtmlString'を実装するクラスに文字列をラップすると、' <%: %> 'サーバタグを使用して文字列を出力するときに、その文字列をHTMLエンコードから保護します。 – Guffa

+0

私は最後のポイントを逃した;)Thx! –

関連する問題