Подтвердить что ты не робот

Разница между MvcHtmlString.Create() и Html.Raw()

Я создаю MVC-проект. Использование MVC 4 и Razor. После создания некоторых страниц мне было интересно: в чем разница между

MvcHtmlString.Create()

и

Html.Raw()

Было бы хорошо, если бы вы могли помочь мне здесь понять это.

Спасибо заранее!

4b9b3361

Ответ 1

Это отличная возможность посмотреть исходный код, доступный нам для 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 по-разному.

Ответ 2

Нет никакой практической разницы.

MvcHtmlString.Create создает экземпляр MvcHtmlString, а метод Html.Raw создает экземпляр HtmlString, но MvcHtmlString просто наследуется от HtmlString, поэтому они работают одинаково.