Вопрос по asp.net-mvc, asp.net-mvc-4 – Разница между MvcHtmlString.Create () и Html.Raw ()

23

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

<code>MvcHtmlString.Create()
</code>

а такж

<code>Html.Raw()
</code>

Было бы неплохо, если бы ты помог мне понять это.

Заранее спасибо

Ваш Ответ

2   ответа
21

доступный нам для ASP.NET http: //aspnetwebstack.codeplex.co).

Посмотрите на 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 имеет дело с нулем по-другому.

Спасибо за этот ответ! Но какой из них следует отдавать предпочтение? Julian
@ Джулиан: Это зависит от того, где находится код и к чему у вас легко есть доступ. Обычно я не использую ни один, я просто используюnew HtmlString(). Guffa
@ Джулиан Как сказал Гуффа: Это зависит от того, где находится ваш код. По моему мнению, я предпочитаю Html.Raw, но в основном потому, что это эстетически приятно при чтении кода (я знаю, это не очень хороший аргумент). Erik van Brakel
@ ErikvanBrakel - это то же самое, что и я. Мне также нравится думать, что если в какой-то момент в будущем, когда HtmlString устарела, они обновят Html.Raw () для работы с новым чем угодно ... и мне не нужно менять свой код. Просто кажется более общим использовать Html.Raw (). Кроме того, я бы никогда не использовал HtmlString в качестве типа данных свойства, поскольку вы не знаете, где ваш код окажется в будущем. Colin Wiseman
5

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

@ RaphaëlAlthaus: результат точно такой же, только по-разному. Обтекание строки в классе, который реализуетIHtmlString защищает строку от кодирования HTML, когда вы выводите ее, используя<%: %> тег сервера. Guffa
Просто вопрос: Msdn говорит для Html.Raw (): Возвращает разметку, которая не закодирована в HTML. / для MvcHtmlString.Create: создает строку в кодировке HTML, используя указанное текстовое значение. Итак: кодированный / не кодированный HTML не имеет «практического значения», или я что-то упустил? Raphaël Althaus
Я пропустил последний пункт;) Спасибо! Raphaël Althaus

Похожие вопросы