私はMVCプロジェクトを作成しています。 MVC 4とRazorを使用する。いくつかのページを作成した後、私は思っていた:あなたはそれを理解するために、ここで私を助けることができればいいだろうMvcHtmlString.Create()とHtml.Raw()の相違点
MvcHtmlString.Create()
と
Html.Raw()
の違いは何ですか。
ありがとうございます!
私はMVCプロジェクトを作成しています。 MVC 4とRazorを使用する。いくつかのページを作成した後、私は思っていた:あなたはそれを理解するために、ここで私を助けることができればいいだろうMvcHtmlString.Create()とHtml.Raw()の相違点
MvcHtmlString.Create()
と
Html.Raw()
の違いは何ですか。
ありがとうございます!
これは、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を扱う方法が異なります。
実際的な違いはありません。 Html.Raw
方法はHtmlString
のインスタンスを作成し、しかしMvcHtmlString
ちょうどHtmlString
から継承するので、彼らは同じように機能しながら
MvcHtmlString.Create
は、MvcHtmlString
のインスタンスを作成します。
ちょうど質問です:MsdnはHtml.Raw()について:HTMLコード化されていないマークアップを返します。/for MvcHtmlString.Create:指定したテキスト値を使用してHTMLエンコードされた文字列を作成します。だから:エンコードされた/エンコードされていないHTMLは、 "実用的な違い"ではない、または私は何かが恋しい? –
@RaphaëlAlthaus:結果はまったく同じですが、説明が異なるだけです。 'IHtmlString'を実装するクラスに文字列をラップすると、' <%: %> 'サーバタグを使用して文字列を出力するときに、その文字列をHTMLエンコードから保護します。 – Guffa
私は最後のポイントを逃した;)Thx! –
その答えをありがとう!しかし、これらのうちのどれが優先されるべきですか? – Julian
@Julian:コードの場所とアクセスしやすい場所によって異なります。 Ususally私はどちらも使用しない、私はちょうど '新しいHtmlString()'を使用します。 – Guffa
@Julian Like Guffa said:あなたのコードがどこにあるかによって異なります。ビューで私はHtml.Rawが好きですが、それは主にコードを読むときに美しいものであるからです(本当に良い議論ではありません)。 –