MVC プロジェクトを作成しています。MVC 4 と Razor を使用します。いくつかのページを作成した後、私は疑問に思っていました:
MvcHtmlString.Create()
と
Html.Raw()
ここを理解していただけると助かります。
前もって感謝します!
MVC プロジェクトを作成しています。MVC 4 と Razor を使用します。いくつかのページを作成した後、私は疑問に思っていました:
MvcHtmlString.Create()
と
Html.Raw()
ここを理解していただけると助かります。
前もって感謝します!
これは、ASP.NET で利用できるソース コード ( https://github.com/aspnet/AspNetWebStack/ ) を確認する絶好の機会です。
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 を別の方法で処理します。
実質的な違いはありません。
はのMvcHtmlString.Create
インスタンスを作成MvcHtmlString
し、Html.Raw
メソッドは のインスタンスを作成しますがHtmlString
、MvcHtmlString
から継承するだけHtmlString
なので、同じように機能します。