28

MVC プロジェクトを作成しています。MVC 4 と Razor を使用します。いくつかのページを作成した後、私は疑問に思っていました:

MvcHtmlString.Create()

Html.Raw()

ここを理解していただけると助かります。

前もって感謝します!

4

2 に答える 2

24

これは、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 を別の方法で処理します。

于 2012-04-26T10:04:32.537 に答える
6

実質的な違いはありません。

はのMvcHtmlString.Createインスタンスを作成MvcHtmlStringし、Html.Rawメソッドは のインスタンスを作成しますがHtmlStringMvcHtmlStringから継承するだけHtmlStringなので、同じように機能します。

于 2012-04-26T10:03:37.800 に答える